11 #ifndef COUENNE_CUT_GENERATOR_HPP
12 #define COUENNE_CUT_GENERATOR_HPP
16 #include "BonOaDecBase.hpp"
17 #include "CglConfig.h"
18 #include "CglCutGenerator.hpp"
19 #include "OsiRowCut.hpp"
20 #include "BonAuxInfos.hpp"
21 #include "BonBabInfos.hpp"
22 #include "OsiSolverInterface.hpp"
28 template <
class T>
class SmartPtr;
34 class RegisteredOptions;
36 class OsiTMINLPInterface;
84 Bonmin::OsiTMINLPInterface *
nlp_;
114 Bonmin::BabSetupBase *base = NULL,
116 struct ASL * = NULL);
158 const CglTreeInfo = CglTreeInfo ())
159 #if CGL_VERSION_MAJOR == 0 && CGL_VERSION_MINOR <= 57
233 void genRowCuts (
const OsiSolverInterface &, OsiCuts &cs,
237 void genColCuts (
const OsiSolverInterface &, OsiCuts &,
int,
int *)
const;
247 {
return ConstPtr (
jnlst_);}
267 void sparse2dense (
int ncols, t_chg_bounds *chg_bds,
int *&changed,
int &nchanged);
Cut Generator for linear convexifications.
bool firstcall_
True if no convexification cuts have been generated yet for this problem.
bool addviolated_
True if we should add the violated cuts only, false if all of them should be added.
static void registerOptions(Ipopt::SmartPtr< Bonmin::RegisteredOptions > roptions)
Add list of options to be read from file.
Bonmin::OsiTMINLPInterface * nlp_
nonlinear solver interface as used within Bonmin (used at first Couenne pass of each b&b node ...
ConstJnlstPtr Jnlst() const
Provide Journalist.
int lastPrintLine
Running count of printed info lines.
status of lower/upper bound of a variable, to be checked/modified in bound tightening ...
enum conv_type convtype_
what kind of sampling should be performed?
void genRowCuts(const OsiSolverInterface &, OsiCuts &cs, int, int *, t_chg_bounds *=NULL) const
generate OsiRowCuts for current convexification
double objValue_
Record obj value at final point of CouenneConv.
bool check_lp_
Check all generated LPs through an independent call to OsiClpSolverInterface::initialSolve() ...
CouenneCutGenerator(Bonmin::OsiTMINLPInterface *=NULL, Bonmin::BabSetupBase *base=NULL, CouenneProblem *=NULL, struct ASL *=NULL)
constructor
enum conv_type ConvType() const
get convexification type (see CouenneTypes.h)
bool check_lp() const
return check_lp flag (used in CouenneSolverInterface)
void getStats(int &nrc, int &ntc, double &st)
Get statistics.
JnlstPtr jnlst_
SmartPointer to the Journalist.
bool enableLpImpliedBounds() const
returns value of enable_lp_implied_bounds_
double septime_
separation time (includes generation of problem)
CouenneProblem * Problem() const
return pointer to symbolic problem
int createCut(OsiCuts &, CouNumber, CouNumber, int, CouNumber, int=-1, CouNumber=0., int=-1, CouNumber=0., bool=false) const
create cut and check violation. Insert and return status
void sparse2dense(int ncols, t_chg_bounds *chg_bds, int *&changed, int &nchanged)
translate sparse to dense vector (should be replaced)
double & rootTime()
Time spent at root node.
void setBabPtr(Bonmin::Bab *p)
Method to set the Bab pointer.
void printLineInfo() const
print node, depth, LB/UB/LP info
CouNumber(* unary_function)(CouNumber)
unary function, used in all exprUnary
Class for MINLP problems with symbolic information.
bool isFirst() const
has generateCuts been called yet?
bool enable_lp_implied_bounds_
Take advantage of OsiClpSolverInterface::tightenBounds (), known to have caused some problems some ti...
void setJnlst(JnlstPtr jnlst__)
int nSamples() const
get number of convexification samples
void addEnvelope(OsiCuts &, int, unary_function, unary_function, int, int, CouNumber, CouNumber, CouNumber, t_chg_bounds *=NULL, bool=false) const
Add general linear envelope to convex function, given its variables' indices, the (univariate) functi...
void setProblem(CouenneProblem *p)
return pointer to symbolic problem
bool & infeasNode() const
Allow to get and set the infeasNode_ flag (used only in generateCuts())
int getnvars() const
total number of variables (original + auxiliary)
double CouNumber
main number type in Couenne
bool infeasNode_
signal infeasibility of current node (found through bound tightening)
Bonmin::Bab * BabPtr_
pointer to the Bab object (used to retrieve the current primal bound through bestObj()) ...
CouenneProblem * problem_
pointer to symbolic repr. of constraint, variables, and bounds
void genColCuts(const OsiSolverInterface &, OsiCuts &, int, int *) const
generate OsiColCuts for improved (implied and propagated) bounds
CouenneCutGenerator * clone() const
clone method (necessary for the abstract CglCutGenerator class)
double rootTime_
Time spent at the root node.
int ntotalcuts_
total number of cuts generated
int addTangent(OsiCuts &, int, int, CouNumber, CouNumber, CouNumber, int) const
add tangent at given poing (x,w) with given slope
bool addViolated() const
should we add the violated cuts only (true), or all of them (false)?
~CouenneCutGenerator()
destructor
int nrootcuts_
number of cuts generated at the first call
void generateCuts(const OsiSolverInterface &, OsiCuts &, const CglTreeInfo=CglTreeInfo()) const
the main CglCutGenerator
int addSegment(OsiCuts &, int, int, CouNumber, CouNumber, CouNumber, CouNumber, int) const
Add half-plane through (x1,y1) and (x2,y2) – resp.
conv_type
position and number of convexification cuts added for a lower convex (upper concave) envelope ...
int nSamples_
how many cuts should be added for each function?