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