# Couenne::CouenneFeasPump Class Reference

An implementation of the Feasibility pump that uses linearization and Ipopt to find the two sequences of points. More...

`#include <CouenneFeasPump.hpp>`

List of all members.

## 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.
| CouenneFeasPump (const CouenneFeasPump &other)
| Copy constructor.
virtual | ~CouenneFeasPump ()
| Destructor.
virtual CbcHeuristic * | clone () const
| Clone.
CouenneFeasPump & | operator= (const CouenneFeasPump &rhs)
| Assignment operator.
virtual void | resetModel (CbcModel *model)
| Does nothing, but necessary as CbcHeuristic declares it pure virtual.
virtual int | solution (double &objectiveValue, double *newSolution)
| Run heuristic, return 1 if a better solution than the one passed is found and 0 otherwise.
void | setNumberSolvePerLevel (int value)
| set number of nlp's solved for each given level of the tree
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
virtual CouNumber | solveNLP (const CouNumber *nSol, CouNumber *&iSol)
| obtain solution to NLP
expression * | updateNLPObj (const double *)
| set new expression as the NLP objective function using argument as point to minimize distance from.
bool | fixIntVariables (const double *sol)
| admits a (possibly fractional) solution and fixes the integer components in the nonlinear problem for later re-solve.
double | findSolution (const double *nSol, double *&sol, int niter, int *nsuciter)
| find feasible solution (called by solveMILP ())
void | init_MILP ()
| initialize all solvers at the first call, where the initial MILP is built
void | initIpoptApp ()
| Common code for initializing non-smartptr ipopt application.
CouenneProblem * | Problem () const
| return pointer to problem
enum fpCompDistIntType | compDistInt () const
| return type of MILP solved
double | multDistNLP () const
| Return Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP):.
double | multHessNLP () const
| weight of Hessian in NLP
double | multObjFNLP () const
| weight of objective in NLP
double | multDistMILP () const
| weight of distance in MILP
double | multHessMILP () const
| weight of Hessian in MILP
double | multObjFMILP () const
| weight of objective in MILP
CouenneTNLP * | nlp () const
| return NLP
int & | nCalls ()
| return number of calls (can be changed)
int | milpPhase (double *nSol, double *iSol)
| MILP phase of the FP.
int | nlpPhase (double *iSol, double *nSol)
| NLP phase of the FP.
## Static Public Member Functions
static void | registerOptions (Ipopt::SmartPtr< Bonmin::RegisteredOptions >)
| initialize options to be read later
## Private Attributes
CouenneProblem * | problem_
| Couenne representation of the problem.
CouenneCutGenerator * | couenneCG_
| CouenneCutGenerator for linearization cuts.
CouenneTNLP * | nlp_
| Continuous relaxation of the problem, with an interface for Ipopt only.
Ipopt::IpoptApplication * | app_
| Ipopt Application pointer for solving NLPs.
OsiSolverInterface * | milp_
| MILP relaxation of the MINLP (used to find integer, non-NLP-feasible solutions).
OsiSolverInterface * | postlp_
| LP relaxation of the MINLP used when fixing integer variables (used for compDistInt_ in FP_DIST_POST and possibly FP_DIST_INT).
CouenneFPpool * | pool_
| Pool of solutions.
std::set< CouenneFPsolution, compareSol > | tabuPool_
| Solutions to avoid.
int * | match_
| matching between reformulation's variables and L-1 norm variables
int | numberSolvePerLevel_
| Number of NLPs solved for each given level of the tree.
double | multDistNLP_
| Weights in computing distance, in both MILP and NLP (must sum up to 1 for MILP and for NLP):.
double | multHessNLP_
| weight of Hessian in NLP
double | multObjFNLP_
| weight of objective in NLP
double | multDistMILP_
| weight of distance in MILP
double | multHessMILP_
| weight of Hessian in MILP
double | multObjFMILP_
| weight of objective in MILP
enum fpCompDistIntType | compDistInt_
| Compute distance from integer variables only, not all variables.
enum fpCutPlane | milpCuttingPlane_
| Separate convexification cuts during or after MILP.
int | nSepRounds_
| Number of separation rounds for MILP convexification cuts.
int | maxIter_
| Maximum iterations per call.
bool | useSCIP_
| Use SCIP instead of Cbc for solving MILPs.
int | milpMethod_
| Which SCIP MILP method to use.
enum fpTabuMgtPolicy | tabuMgt_
| Tabu management policy: none, use from pool, random perturbation of current solution.
int | nCalls_
| How often should it be called.
double | fadeMult_
| decrease factor for MILP/NLP multipliers of distance/Hessian/objective

## Detailed Description

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.

## Member Enumeration Documentation

enum Couenne::CouenneFeasPump::fpCompDistIntType

Enumerator:

  FP_DIST_INT |
  FP_DIST_ALL |
  FP_DIST_POST |

Definition at line 61 of file CouenneFeasPump.hpp.

enum Couenne::CouenneFeasPump::fpCutPlane

Enumerator:

  FP_CUT_NONE |
  FP_CUT_INTEGRATED |
  FP_CUT_EXTERNAL |
  FP_CUT_POST |

Definition at line 62 of file CouenneFeasPump.hpp.

enum Couenne::CouenneFeasPump::fpTabuMgtPolicy

Enumerator:

  FP_TABU_NONE |
  FP_TABU_POOL |
  FP_TABU_PERTURB |
  FP_TABU_CUT |

Definition at line 63 of file CouenneFeasPump.hpp.

## Constructor & Destructor Documentation

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 Couenne::CouenneFeasPump::~CouenneFeasPump | ( |  | ) | `[virtual]`

Destructor.

## Member Function Documentation

virtual CbcHeuristic* Couenne::CouenneFeasPump::clone | ( |  | ) | const`[virtual]`

Clone.

CouenneFeasPump& Couenne::CouenneFeasPump::operator= | ( | const CouenneFeasPump & | rhs | ) |

Assignment operator.

virtual void Couenne::CouenneFeasPump::resetModel | ( | CbcModel * | model | ) | `[inline, virtual]`

Does nothing, but necessary as CbcHeuristic declares it pure virtual.

Definition at line 83 of file CouenneFeasPump.hpp.

virtual int Couenne::CouenneFeasPump::solution | ( | double & | objectiveValue,
|  | double * | newSolution |
| ) |  |  | `[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.

void Couenne::CouenneFeasPump::setNumberSolvePerLevel | ( | int | value | ) | `[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 CouNumber Couenne::CouenneFeasPump::solveMILP | ( | const CouNumber * | nSol,
|  | CouNumber *& | iSol,
|  | int | niter,
|  | int * | nsuciter |
| ) |  |  | `[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 CouNumber Couenne::CouenneFeasPump::solveNLP | ( | const CouNumber * | nSol,
|  | CouNumber *& | iSol |
| ) |  |  | `[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 void Couenne::CouenneFeasPump::registerOptions | ( | Ipopt::SmartPtr< Bonmin::RegisteredOptions > |  | ) | `[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.

CouenneProblem* Couenne::CouenneFeasPump::Problem | ( |  | ) | const`[inline]`

return pointer to problem

Definition at line 135 of file CouenneFeasPump.hpp.

References problem_.

enum fpCompDistIntType Couenne::CouenneFeasPump::compDistInt | ( |  | ) | const`[inline]`

return type of MILP solved

Definition at line 139 of file CouenneFeasPump.hpp.

References compDistInt_.

double Couenne::CouenneFeasPump::multDistNLP | ( |  | ) | const`[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_.

double Couenne::CouenneFeasPump::multHessNLP | ( |  | ) | const`[inline]`

weight of Hessian in NLP

Definition at line 146 of file CouenneFeasPump.hpp.

References fadingCoeff(), and multHessNLP_.

double Couenne::CouenneFeasPump::multObjFNLP | ( |  | ) | const`[inline]`

weight of objective in NLP

Definition at line 147 of file CouenneFeasPump.hpp.

References fadingCoeff(), and multObjFNLP_.

double Couenne::CouenneFeasPump::multDistMILP | ( |  | ) | const`[inline]`

weight of distance in MILP

Definition at line 149 of file CouenneFeasPump.hpp.

References fadingCoeff(), and multDistMILP_.

double Couenne::CouenneFeasPump::multHessMILP | ( |  | ) | const`[inline]`

weight of Hessian in MILP

Definition at line 150 of file CouenneFeasPump.hpp.

References fadingCoeff(), and multHessMILP_.

double Couenne::CouenneFeasPump::multObjFMILP | ( |  | ) | const`[inline]`

weight of objective in MILP

Definition at line 151 of file CouenneFeasPump.hpp.

References fadingCoeff(), and multObjFMILP_.

CouenneTNLP* Couenne::CouenneFeasPump::nlp | ( |  | ) | const`[inline]`

return NLP

Definition at line 154 of file CouenneFeasPump.hpp.

References nlp_.

int& Couenne::CouenneFeasPump::nCalls | ( |  | ) | `[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.

## Member Data Documentation

CouenneProblem* Couenne::CouenneFeasPump::problem_`[private]`

Couenne representation of the problem.

Definition at line 179 of file CouenneFeasPump.hpp.

Referenced by Problem().

CouenneCutGenerator* Couenne::CouenneFeasPump::couenneCG_`[private]`

CouenneCutGenerator for linearization cuts.

Definition at line 182 of file CouenneFeasPump.hpp.

CouenneTNLP* Couenne::CouenneFeasPump::nlp_`[private]`

Continuous relaxation of the problem, with an interface for Ipopt only.

Definition at line 193 of file CouenneFeasPump.hpp.

Referenced by nlp().

Ipopt::IpoptApplication* Couenne::CouenneFeasPump::app_`[private]`

Ipopt Application pointer for solving NLPs.

Definition at line 196 of file CouenneFeasPump.hpp.

OsiSolverInterface* Couenne::CouenneFeasPump::milp_`[private]`

MILP relaxation of the MINLP (used to find integer, non-NLP-feasible solutions).

Definition at line 200 of file CouenneFeasPump.hpp.

OsiSolverInterface* Couenne::CouenneFeasPump::postlp_`[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.

CouenneFPpool* Couenne::CouenneFeasPump::pool_`[private]`

Pool of solutions.

Definition at line 208 of file CouenneFeasPump.hpp.

std::set<CouenneFPsolution, compareSol> Couenne::CouenneFeasPump::tabuPool_`[private]`

Solutions to avoid.

Definition at line 211 of file CouenneFeasPump.hpp.

int* Couenne::CouenneFeasPump::match_`[private]`

matching between reformulation's variables and L-1 norm variables

Definition at line 214 of file CouenneFeasPump.hpp.

int Couenne::CouenneFeasPump::numberSolvePerLevel_`[private]`

Number of NLPs solved for each given level of the tree.

Definition at line 221 of file CouenneFeasPump.hpp.

Referenced by setNumberSolvePerLevel().

double Couenne::CouenneFeasPump::multDistNLP_`[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().

double Couenne::CouenneFeasPump::multHessNLP_`[private]`

weight of Hessian in NLP

Definition at line 227 of file CouenneFeasPump.hpp.

Referenced by multHessNLP().

double Couenne::CouenneFeasPump::multObjFNLP_`[private]`

weight of objective in NLP

Definition at line 228 of file CouenneFeasPump.hpp.

Referenced by multObjFNLP().

double Couenne::CouenneFeasPump::multDistMILP_`[private]`

weight of distance in MILP

Definition at line 230 of file CouenneFeasPump.hpp.

Referenced by multDistMILP().

double Couenne::CouenneFeasPump::multHessMILP_`[private]`

weight of Hessian in MILP

Definition at line 231 of file CouenneFeasPump.hpp.

Referenced by multHessMILP().

double Couenne::CouenneFeasPump::multObjFMILP_`[private]`

weight of objective in MILP

Definition at line 232 of file CouenneFeasPump.hpp.

Referenced by multObjFMILP().

enum fpCompDistIntType Couenne::CouenneFeasPump::compDistInt_`[private]`

Compute distance from integer variables only, not all variables.

Definition at line 235 of file CouenneFeasPump.hpp.

Referenced by compDistInt().

enum fpCutPlane Couenne::CouenneFeasPump::milpCuttingPlane_`[private]`

Separate convexification cuts during or after MILP.

Definition at line 238 of file CouenneFeasPump.hpp.

int Couenne::CouenneFeasPump::nSepRounds_`[private]`

Number of separation rounds for MILP convexification cuts.

Definition at line 241 of file CouenneFeasPump.hpp.

int Couenne::CouenneFeasPump::maxIter_`[private]`

Maximum iterations per call.

Definition at line 244 of file CouenneFeasPump.hpp.

bool Couenne::CouenneFeasPump::useSCIP_`[private]`

Use SCIP instead of Cbc for solving MILPs.

Definition at line 247 of file CouenneFeasPump.hpp.

int Couenne::CouenneFeasPump::milpMethod_`[private]`

Which SCIP MILP method to use.

Definition at line 250 of file CouenneFeasPump.hpp.

enum fpTabuMgtPolicy Couenne::CouenneFeasPump::tabuMgt_`[private]`

Tabu management policy: none, use from pool, random perturbation of current solution.

Definition at line 253 of file CouenneFeasPump.hpp.

int Couenne::CouenneFeasPump::nCalls_`[private]`

How often should it be called.

Definition at line 256 of file CouenneFeasPump.hpp.

Referenced by nCalls().

double Couenne::CouenneFeasPump::fadeMult_`[private]`

decrease factor for MILP/NLP multipliers of distance/Hessian/objective

Definition at line 259 of file CouenneFeasPump.hpp.

The documentation for this class was generated from the following file:

- CouenneFeasPump.hpp

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines