12 #ifndef CouenneFeasPump_HPP
13 #define CouenneFeasPump_HPP
23 #include "scip/scip.h"
36 {
return (a<0) ? a+1 : a;}
39 class IpoptApplication;
43 class RegisteredOptions;
50 class CouenneCutGenerator;
52 class CouenneSparseMatrix;
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.
An implementation of the Feasibility pump that uses linearization and Ipopt to find the two sequences...
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 & operator=(const CouenneFeasPump &rhs)
Assignment operator.
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...
virtual int solution(double &objectiveValue, double *newSolution)
Run heuristic, return 1 if a better solution than the one passed is found and 0 otherwise.
CouenneProblem * Problem() const
return pointer to problem
virtual ~CouenneFeasPump()
Destructor.
void setNumberSolvePerLevel(int value)
set number of nlp's solved for each given level of the tree
double multHessMILP() const
weight of Hessian in MILP
int & nCalls()
return number of calls (can be changed)
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) ...
double multDistNLP() const
Return Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP):
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
expression * updateNLPObj(const double *)
set new expression as the NLP objective function using argument as point to minimize distance from.
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.
virtual CbcHeuristic * clone() const
Clone.
double multObjFMILP() const
weight of objective in MILP
CouenneTNLP * nlp() const
return NLP
Class for MINLP problems with symbolic information.
Class for handling NLPs using CouenneProblem.
general include file for different compilers
double CouNumber
main number type in Couenne