12 #ifndef CouenneFeasPump_HPP 
   13 #define CouenneFeasPump_HPP 
   18 #include "CbcHeuristic.hpp" 
   20 #include "IpOptionsList.hpp" 
   23 #include "scip/scip.h" 
   27 class OsiSolverInterface;
 
   36 {
return (a<0) ? a+1 : 
a;}
 
   39   class IpoptApplication;
 
   43   class RegisteredOptions;
 
   50   class CouenneCutGenerator;
 
   52   class CouenneSparseMatrix;
 
   77     virtual CbcHeuristic *
clone () 
const;
 
   92     virtual int solution (
double &objectiveValue, 
double *newSolution);
 
   99     void checkInfinity (
struct Scip *scip, 
double val, 
double infinity);
 
  125     double findSolution (
const double *nSol, 
double *&sol, 
int niter, 
int* nsuciter);
 
  162     int milpPhase (
double *nSol, 
double *iSol);
 
  165     int nlpPhase (
double *iSol, 
double *nSol);
 
  168     SCIP_RETCODE ScipSolve (
const double *nSol, 
double* &sol, 
int niter, 
int* nsuciter, 
CouNumber &obj);
 
Cut Generator for linear convexifications. 
 
static void registerOptions(Ipopt::SmartPtr< Bonmin::RegisteredOptions >)
initialize options to be read later 
 
Ipopt::IpoptApplication * app_
Ipopt Application pointer for solving NLPs. 
 
double multDistMILP_
weight of distance in MILP 
 
CouenneCutGenerator * couenneCG_
CouenneCutGenerator for linearization cuts. 
 
CouenneProblem * Problem() const 
return pointer to problem 
 
expression * updateNLPObj(const double *)
set new expression as the NLP objective function using argument as point to minimize distance from...
 
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 multObjFNLP_
weight of objective in NLP 
 
int maxIter_
Maximum iterations per call. 
 
int nCalls_
How often should it be called. 
 
double multObjFMILP_
weight of objective in MILP 
 
void fint fint fint real * a
 
double multObjFNLP() const 
weight of objective in NLP 
 
int milpPhase(double *nSol, double *iSol)
MILP phase of the FP. 
 
int & nCalls()
return number of calls (can be changed) 
 
CouenneFeasPump & operator=(const CouenneFeasPump &rhs)
Assignment operator. 
 
int nSepRounds_
Number of separation rounds for MILP convexification cuts. 
 
virtual CbcHeuristic * clone() const 
Clone. 
 
virtual ~CouenneFeasPump()
Destructor. 
 
double multHessMILP_
weight of Hessian in MILP 
 
int nlpPhase(double *iSol, double *nSol)
NLP phase of the FP. 
 
enum fpCutPlane milpCuttingPlane_
Separate convexification cuts during or after MILP. 
 
int * match_
matching between reformulation's variables and L-1 norm variables 
 
CouenneFPpool * pool_
Pool of solutions. 
 
An implementation of the Feasibility pump that uses linearization and Ipopt to find the two sequences...
 
int milpMethod_
Which SCIP MILP method to use. 
 
double multDistNLP_
Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP): ...
 
double multObjFMILP() const 
weight of objective in MILP 
 
double multDistMILP() const 
weight of distance in MILP 
 
double findSolution(const double *nSol, double *&sol, int niter, int *nsuciter)
find feasible solution (called by solveMILP ()) 
 
Class for MINLP problems with symbolic information. 
 
bool useSCIP_
Use SCIP instead of Cbc for solving MILPs. 
 
CouenneTNLP * nlp() const 
return NLP 
 
int numberSolvePerLevel_
Number of NLPs solved for each given level of the tree. 
 
virtual CouNumber solveNLP(const CouNumber *nSol, CouNumber *&iSol)
obtain solution to NLP 
 
enum fpCompDistIntType compDistInt_
Compute distance from integer variables only, not all variables. 
 
void init_MILP()
initialize all solvers at the first call, where the initial MILP is built 
 
enum fpCompDistIntType compDistInt() const 
return type of MILP solved 
 
double multHessMILP() const 
weight of Hessian in MILP 
 
std::set< CouenneFPsolution, compareSol > tabuPool_
Solutions to avoid. 
 
double multHessNLP_
weight of Hessian in NLP 
 
double CouNumber
main number type in Couenne 
 
OsiSolverInterface * postlp_
LP relaxation of the MINLP used when fixing integer variables (used for compDistInt_ in FP_DIST_POST ...
 
double fadingCoeff(double a)
 
CouenneFeasPump(CouenneProblem *couenne=NULL, CouenneCutGenerator *cg=NULL, Ipopt::SmartPtr< Ipopt::OptionsList > options=NULL)
Constructor with (optional) MINLP pointer. 
 
enum fpTabuMgtPolicy tabuMgt_
Tabu management policy: none, use from pool, random perturbation of current solution. 
 
void initIpoptApp()
Common code for initializing non-smartptr ipopt application. 
 
double multHessNLP() const 
weight of Hessian in NLP 
 
virtual void resetModel(CbcModel *model)
Does nothing, but necessary as CbcHeuristic declares it pure virtual. 
 
double multDistNLP() const 
Return Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP): ...
 
Class for handling NLPs using CouenneProblem. 
 
CouenneProblem * problem_
Couenne representation of the problem. 
 
double fadeMult_
decrease factor for MILP/NLP multipliers of distance/Hessian/objective 
 
void setNumberSolvePerLevel(int value)
set number of nlp's solved for each given level of the tree 
 
virtual int solution(double &objectiveValue, double *newSolution)
Run heuristic, return 1 if a better solution than the one passed is found and 0 otherwise. 
 
OsiSolverInterface * milp_
MILP relaxation of the MINLP (used to find integer, non-NLP-feasible solutions) 
 
bool fixIntVariables(const double *sol)
admits a (possibly fractional) solution and fixes the integer components in the nonlinear problem for...
 
CouenneTNLP * nlp_
Continuous relaxation of the problem, with an interface for Ipopt only.