Couenne
0.2
|
An implementation of the Feasibility pump that uses linearization and Ipopt to find the two sequences of points. More...
#include <CouenneFeasPump.hpp>
Public Types | |
enum | fpCompDistIntType { FP_DIST_INT, FP_DIST_ALL, FP_DIST_POST } |
enum | fpCutPlane { FP_CUT_NONE, FP_CUT_INTEGRATED, FP_CUT_EXTERNAL, FP_CUT_POST } |
enum | fpTabuMgtPolicy { FP_TABU_NONE, FP_TABU_POOL, FP_TABU_PERTURB, FP_TABU_CUT } |
Public Member Functions | |
CouenneFeasPump (CouenneProblem *couenne=NULL, CouenneCutGenerator *cg=NULL, Ipopt::SmartPtr< Ipopt::OptionsList > options=NULL) | |
Constructor with (optional) MINLP pointer. More... | |
CouenneFeasPump (const CouenneFeasPump &other) | |
Copy constructor. More... | |
virtual | ~CouenneFeasPump () |
Destructor. More... | |
virtual CbcHeuristic * | clone () const |
Clone. More... | |
CouenneFeasPump & | operator= (const CouenneFeasPump &rhs) |
Assignment operator. More... | |
virtual void | resetModel (CbcModel *model) |
Does nothing, but necessary as CbcHeuristic declares it pure virtual. More... | |
virtual int | solution (double &objectiveValue, double *newSolution) |
Run heuristic, return 1 if a better solution than the one passed is found and 0 otherwise. More... | |
void | setNumberSolvePerLevel (int value) |
set number of nlp's solved for each given level of the tree More... | |
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) to the current NLP-feasible (but fractional) solution nsol More... | |
virtual CouNumber | solveNLP (const CouNumber *nSol, CouNumber *&iSol) |
obtain solution to NLP More... | |
expression * | updateNLPObj (const double *) |
set new expression as the NLP objective function using argument as point to minimize distance from. More... | |
bool | fixIntVariables (const double *sol) |
admits a (possibly fractional) solution and fixes the integer components in the nonlinear problem for later re-solve. More... | |
double | findSolution (const double *nSol, double *&sol, int niter, int *nsuciter) |
find feasible solution (called by solveMILP ()) More... | |
void | init_MILP () |
initialize all solvers at the first call, where the initial MILP is built More... | |
void | initIpoptApp () |
Common code for initializing non-smartptr ipopt application. More... | |
CouenneProblem * | Problem () const |
return pointer to problem More... | |
enum fpCompDistIntType | compDistInt () const |
return type of MILP solved More... | |
double | multDistNLP () const |
Return Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP): More... | |
double | multHessNLP () const |
weight of Hessian in NLP More... | |
double | multObjFNLP () const |
weight of objective in NLP More... | |
double | multDistMILP () const |
weight of distance in MILP More... | |
double | multHessMILP () const |
weight of Hessian in MILP More... | |
double | multObjFMILP () const |
weight of objective in MILP More... | |
CouenneTNLP * | nlp () const |
return NLP More... | |
int & | nCalls () |
return number of calls (can be changed) More... | |
int | milpPhase (double *nSol, double *iSol) |
MILP phase of the FP. More... | |
int | nlpPhase (double *iSol, double *nSol) |
NLP phase of the FP. More... | |
Static Public Member Functions | |
static void | registerOptions (Ipopt::SmartPtr< Bonmin::RegisteredOptions >) |
initialize options to be read later More... | |
Private Attributes | |
CouenneProblem * | problem_ |
Couenne representation of the problem. More... | |
CouenneCutGenerator * | couenneCG_ |
CouenneCutGenerator for linearization cuts. More... | |
CouenneTNLP * | nlp_ |
Continuous relaxation of the problem, with an interface for Ipopt only. More... | |
Ipopt::IpoptApplication * | app_ |
Ipopt Application pointer for solving NLPs. More... | |
OsiSolverInterface * | milp_ |
MILP relaxation of the MINLP (used to find integer, non-NLP-feasible solutions) More... | |
OsiSolverInterface * | postlp_ |
LP relaxation of the MINLP used when fixing integer variables (used for compDistInt_ in FP_DIST_POST and possibly FP_DIST_INT) More... | |
CouenneFPpool * | pool_ |
Pool of solutions. More... | |
std::set< CouenneFPsolution, compareSol > | tabuPool_ |
Solutions to avoid. More... | |
int * | match_ |
matching between reformulation's variables and L-1 norm variables More... | |
int | numberSolvePerLevel_ |
Number of NLPs solved for each given level of the tree. More... | |
double | multDistNLP_ |
Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP): More... | |
double | multHessNLP_ |
weight of Hessian in NLP More... | |
double | multObjFNLP_ |
weight of objective in NLP More... | |
double | multDistMILP_ |
weight of distance in MILP More... | |
double | multHessMILP_ |
weight of Hessian in MILP More... | |
double | multObjFMILP_ |
weight of objective in MILP More... | |
enum fpCompDistIntType | compDistInt_ |
Compute distance from integer variables only, not all variables. More... | |
enum fpCutPlane | milpCuttingPlane_ |
Separate convexification cuts during or after MILP. More... | |
int | nSepRounds_ |
Number of separation rounds for MILP convexification cuts. More... | |
int | maxIter_ |
Maximum iterations per call. More... | |
bool | useSCIP_ |
Use SCIP instead of Cbc for solving MILPs. More... | |
int | milpMethod_ |
Which SCIP MILP method to use. More... | |
enum fpTabuMgtPolicy | tabuMgt_ |
Tabu management policy: none, use from pool, random perturbation of current solution. More... | |
int | nCalls_ |
How often should it be called. More... | |
double | fadeMult_ |
decrease factor for MILP/NLP multipliers of distance/Hessian/objective More... | |
An implementation of the Feasibility pump that uses linearization and Ipopt to find the two sequences of points.
Definition at line 57 of file CouenneFeasPump.hpp.
Enumerator | |
---|---|
FP_DIST_INT | |
FP_DIST_ALL | |
FP_DIST_POST |
Definition at line 61 of file CouenneFeasPump.hpp.
Enumerator | |
---|---|
FP_CUT_NONE | |
FP_CUT_INTEGRATED | |
FP_CUT_EXTERNAL | |
FP_CUT_POST |
Definition at line 62 of file CouenneFeasPump.hpp.
Enumerator | |
---|---|
FP_TABU_NONE | |
FP_TABU_POOL | |
FP_TABU_PERTURB | |
FP_TABU_CUT |
Definition at line 63 of file CouenneFeasPump.hpp.
Couenne::CouenneFeasPump::CouenneFeasPump | ( | CouenneProblem * | couenne = NULL , |
CouenneCutGenerator * | cg = NULL , |
||
Ipopt::SmartPtr< Ipopt::OptionsList > | options = NULL |
||
) |
Constructor with (optional) MINLP pointer.
Couenne::CouenneFeasPump::CouenneFeasPump | ( | const CouenneFeasPump & | other | ) |
Copy constructor.
|
virtual |
Destructor.
|
virtual |
Clone.
CouenneFeasPump& Couenne::CouenneFeasPump::operator= | ( | const CouenneFeasPump & | rhs | ) |
Assignment operator.
|
inlinevirtual |
Does nothing, but necessary as CbcHeuristic declares it pure virtual.
Definition at line 83 of file CouenneFeasPump.hpp.
|
virtual |
Run heuristic, return 1 if a better solution than the one passed is found and 0 otherwise.
objectiveValue Best known solution in input and value of solution found in output
newSolution Solution found by heuristic.
|
inline |
set number of nlp's solved for each given level of the tree
Definition at line 95 of file CouenneFeasPump.hpp.
References numberSolvePerLevel_.
|
virtual |
find integer (possibly NLP-infeasible) point isol closest (according to the l-1 norm of the hessian) to the current NLP-feasible (but fractional) solution nsol
|
virtual |
obtain solution to NLP
expression* Couenne::CouenneFeasPump::updateNLPObj | ( | const double * | ) |
set new expression as the NLP objective function using argument as point to minimize distance from.
Return new objective function
bool Couenne::CouenneFeasPump::fixIntVariables | ( | const double * | sol | ) |
admits a (possibly fractional) solution and fixes the integer components in the nonlinear problem for later re-solve.
Returns false if restriction infeasible, true otherwise
|
static |
initialize options to be read later
double Couenne::CouenneFeasPump::findSolution | ( | const double * | nSol, |
double *& | sol, | ||
int | niter, | ||
int * | nsuciter | ||
) |
find feasible solution (called by solveMILP ())
void Couenne::CouenneFeasPump::init_MILP | ( | ) |
initialize all solvers at the first call, where the initial MILP is built
void Couenne::CouenneFeasPump::initIpoptApp | ( | ) |
Common code for initializing non-smartptr ipopt application.
|
inline |
|
inline |
return type of MILP solved
Definition at line 139 of file CouenneFeasPump.hpp.
References compDistInt_.
|
inline |
Return Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP):
weight of distance in NLP
Definition at line 145 of file CouenneFeasPump.hpp.
References fadingCoeff(), and multDistNLP_.
|
inline |
weight of Hessian in NLP
Definition at line 146 of file CouenneFeasPump.hpp.
References fadingCoeff(), and multHessNLP_.
|
inline |
weight of objective in NLP
Definition at line 147 of file CouenneFeasPump.hpp.
References fadingCoeff(), and multObjFNLP_.
|
inline |
weight of distance in MILP
Definition at line 149 of file CouenneFeasPump.hpp.
References fadingCoeff(), and multDistMILP_.
|
inline |
weight of Hessian in MILP
Definition at line 150 of file CouenneFeasPump.hpp.
References fadingCoeff(), and multHessMILP_.
|
inline |
weight of objective in MILP
Definition at line 151 of file CouenneFeasPump.hpp.
References fadingCoeff(), and multObjFMILP_.
|
inline |
|
inline |
return number of calls (can be changed)
Definition at line 158 of file CouenneFeasPump.hpp.
References nCalls_.
int Couenne::CouenneFeasPump::milpPhase | ( | double * | nSol, |
double * | iSol | ||
) |
MILP phase of the FP.
int Couenne::CouenneFeasPump::nlpPhase | ( | double * | iSol, |
double * | nSol | ||
) |
NLP phase of the FP.
|
private |
Couenne representation of the problem.
Definition at line 179 of file CouenneFeasPump.hpp.
Referenced by Problem().
|
private |
CouenneCutGenerator for linearization cuts.
Definition at line 182 of file CouenneFeasPump.hpp.
|
private |
Continuous relaxation of the problem, with an interface for Ipopt only.
Definition at line 193 of file CouenneFeasPump.hpp.
Referenced by nlp().
|
private |
Ipopt Application pointer for solving NLPs.
Definition at line 196 of file CouenneFeasPump.hpp.
|
private |
MILP relaxation of the MINLP (used to find integer, non-NLP-feasible solutions)
Definition at line 200 of file CouenneFeasPump.hpp.
|
private |
LP relaxation of the MINLP used when fixing integer variables (used for compDistInt_ in FP_DIST_POST and possibly FP_DIST_INT)
Definition at line 205 of file CouenneFeasPump.hpp.
|
private |
Pool of solutions.
Definition at line 208 of file CouenneFeasPump.hpp.
|
private |
Solutions to avoid.
Definition at line 211 of file CouenneFeasPump.hpp.
|
private |
matching between reformulation's variables and L-1 norm variables
Definition at line 214 of file CouenneFeasPump.hpp.
|
private |
Number of NLPs solved for each given level of the tree.
Definition at line 221 of file CouenneFeasPump.hpp.
Referenced by setNumberSolvePerLevel().
|
private |
Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP):
weight of distance in NLP
Definition at line 226 of file CouenneFeasPump.hpp.
Referenced by multDistNLP().
|
private |
weight of Hessian in NLP
Definition at line 227 of file CouenneFeasPump.hpp.
Referenced by multHessNLP().
|
private |
weight of objective in NLP
Definition at line 228 of file CouenneFeasPump.hpp.
Referenced by multObjFNLP().
|
private |
weight of distance in MILP
Definition at line 230 of file CouenneFeasPump.hpp.
Referenced by multDistMILP().
|
private |
weight of Hessian in MILP
Definition at line 231 of file CouenneFeasPump.hpp.
Referenced by multHessMILP().
|
private |
weight of objective in MILP
Definition at line 232 of file CouenneFeasPump.hpp.
Referenced by multObjFMILP().
|
private |
Compute distance from integer variables only, not all variables.
Definition at line 235 of file CouenneFeasPump.hpp.
Referenced by compDistInt().
|
private |
Separate convexification cuts during or after MILP.
Definition at line 238 of file CouenneFeasPump.hpp.
|
private |
Number of separation rounds for MILP convexification cuts.
Definition at line 241 of file CouenneFeasPump.hpp.
|
private |
Maximum iterations per call.
Definition at line 244 of file CouenneFeasPump.hpp.
|
private |
Use SCIP instead of Cbc for solving MILPs.
Definition at line 247 of file CouenneFeasPump.hpp.
|
private |
Which SCIP MILP method to use.
Definition at line 250 of file CouenneFeasPump.hpp.
|
private |
Tabu management policy: none, use from pool, random perturbation of current solution.
Definition at line 253 of file CouenneFeasPump.hpp.
|
private |
How often should it be called.
Definition at line 256 of file CouenneFeasPump.hpp.
Referenced by nCalls().
|
private |
decrease factor for MILP/NLP multipliers of distance/Hessian/objective
Definition at line 259 of file CouenneFeasPump.hpp.