12#ifndef CouenneFeasPump_HPP
13#define CouenneFeasPump_HPP
36{
return (a<0) ? a+1 : a;}
92 virtual int solution (
double &objectiveValue,
double *newSolution);
96 {numberSolvePerLevel_ = value;}
100 void checkInfinity (
struct Scip *scip,
double val,
double infinity);
125 double findSolution (
const double *nSol,
double *&sol,
int niter,
int* nsuciter);
140 {
return compDistInt_;}
168 SCIP_RETCODE ScipSolve (
const double *nSol,
double* &sol,
int niter,
int* nsuciter,
CouNumber &obj);
211 std::set <CouenneFPsolution, compareSol> tabuPool_;
221 int numberSolvePerLevel_;
230 double multDistMILP_;
231 double multHessMILP_;
232 double multObjFMILP_;
double fadingCoeff(double a)
Cut Generator for linear convexifications.
CouenneProblem * Problem() const
return pointer to problem
static void registerOptions(Ipopt::SmartPtr< Bonmin::RegisteredOptions >)
initialize options to be read later
virtual CouNumber solveNLP(const CouNumber *nSol, CouNumber *&iSol)
obtain solution to NLP
CouenneFeasPump(CouenneProblem *couenne=NULL, CouenneCutGenerator *cg=NULL, Ipopt::SmartPtr< Ipopt::OptionsList > options=NULL)
Constructor with (optional) MINLP pointer.
double multDistMILP() const
weight of distance in MILP
int milpPhase(double *nSol, double *iSol)
MILP phase of the FP.
CouenneFeasPump(const CouenneFeasPump &other)
Copy constructor.
double multObjFNLP() const
weight of objective in NLP
bool fixIntVariables(const double *sol)
admits a (possibly fractional) solution and fixes the integer components in the nonlinear problem for...
CouenneTNLP * nlp() const
return NLP
virtual int solution(double &objectiveValue, double *newSolution)
Run heuristic, return 1 if a better solution than the one passed is found and 0 otherwise.
virtual ~CouenneFeasPump()
Destructor.
void setNumberSolvePerLevel(int value)
set number of nlp's solved for each given level of the tree
expression * updateNLPObj(const double *)
set new expression as the NLP objective function using argument as point to minimize distance from.
double multHessMILP() const
weight of Hessian in MILP
double findSolution(const double *nSol, double *&sol, int niter, int *nsuciter)
find feasible solution (called by solveMILP ())
virtual CouNumber solveMILP(const CouNumber *nSol, CouNumber *&iSol, int niter, int *nsuciter)
find integer (possibly NLP-infeasible) point isol closest (according to the l-1 norm of the hessian) ...
int & nCalls()
return number of calls (can be changed)
double multDistNLP() const
Return Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP):
CouenneFeasPump & operator=(const CouenneFeasPump &rhs)
Assignment operator.
virtual CbcHeuristic * clone() const
Clone.
enum fpCompDistIntType compDistInt() const
return type of MILP solved
void init_MILP()
initialize all solvers at the first call, where the initial MILP is built
int nlpPhase(double *iSol, double *nSol)
NLP phase of the FP.
double multHessNLP() const
weight of Hessian in NLP
virtual void resetModel(CbcModel *model)
Does nothing, but necessary as CbcHeuristic declares it pure virtual.
void initIpoptApp()
Common code for initializing non-smartptr ipopt application.
double multObjFMILP() const
weight of objective in MILP
Class for MINLP problems with symbolic information.
Class for sparse Matrixs (used in modifying distances in FP)
Class for handling NLPs using CouenneProblem.
general include file for different compilers
double CouNumber
main number type in Couenne