Couenne  0.5.8
CouenneObject.hpp
Go to the documentation of this file.
1 /* $Id: CouenneObject.hpp 793 2012-01-26 03:07:16Z pbelotti $
2  *
3  * Name: CouenneObject.hpp
4  * Authors: Pierre Bonami, IBM Corp.
5  * Pietro Belotti, Carnegie Mellon University
6  * Purpose: Object for auxiliary variables
7  *
8  * (C) Carnegie-Mellon University, 2006-11.
9  * This file is licensed under the Eclipse Public License (EPL)
10  */
11 
12 #ifndef COUENNEOBJECT_HPP
13 #define COUENNEOBJECT_HPP
14 
15 #include "BonBabSetupBase.hpp"
16 
17 #include "CouenneExprVar.hpp"
18 #include "CouenneJournalist.hpp"
19 #include "OsiBranchingObject.hpp"
20 
21 namespace Couenne {
22 
23 const CouNumber default_alpha = 0.25;
25 const CouNumber max_pseudocost = 1000.;
26 
28 const double large_bound = 1e9;
29 
30 #define AGGR_MUL 2
31 #define THRES_ZERO_SYMM 0.8
32 
34 
39 
42 
43 class funtriplet;
44 class CouenneProblem;
45 class CouenneCutGenerator;
46 
47 CouNumber minMaxDelta (funtriplet *ft, CouNumber lb, CouNumber ub);
48 CouNumber maxHeight (funtriplet *ft, CouNumber lb, CouNumber ub);
49 
50 
56 
57  class CouenneObject: public OsiObject {
58 
59 public:
60 
66 
69 
72 
74  CouenneObject ();
75 
78  CouenneProblem *p,
79  exprVar *ref, Bonmin::BabSetupBase *base, JnlstPtr jnlst);
80 
83 
86 
88  CouenneObject (const CouenneObject &src);
89 
91  virtual CouenneObject * clone () const
92  {return new CouenneObject (*this);}
93 
96 
99  virtual double infeasibility (const OsiBranchingInformation *info, int &way) const;
100 
103  virtual double checkInfeasibility (const OsiBranchingInformation * info) const;
104 
106  virtual double feasibleRegion (OsiSolverInterface*, const OsiBranchingInformation*) const;
107 
111  const OsiBranchingInformation*, int) const;
112 
114  exprVar *Reference () const
115  {return reference_;}
116 
118  enum brSelStrat Strategy () const
119  {return strategy_;}
120 
122  CouNumber getBrPoint (funtriplet *ft, CouNumber x0, CouNumber l, CouNumber u, const OsiBranchingInformation *info = NULL) const;
123 
126  CouNumber midInterval (CouNumber x, CouNumber l, CouNumber u, const OsiBranchingInformation *info = NULL) const;
127 
129  virtual double downEstimate () const
130  {//if (jnlst_ -> ProduceOutput (J_MATRIX, J_BRANCHING)) {
131  //printf ("DOWN EST = %g for ", downEstimate_);
132  //reference_ -> print ();
133  //printf ("\n");
134  //}
135  return downEstimate_;}
136 
138  virtual double upEstimate () const
139  {//if (jnlst_ -> ProduceOutput (J_MATRIX, J_BRANCHING)) {
140  //printf ("UP EST = %g for ", upEstimate_);
141  //reference_ -> print ();
142  //printf ("\n");
143  //}
144  return upEstimate_;}
145 
150  void setEstimate (double est, int direction)
151  {(direction ? upEstimate_ : downEstimate_) = est;}
152 
154  void setEstimates (const OsiBranchingInformation *info,
156  CouNumber *brpt) const;
157 
159  virtual bool isCuttable () const {
160  return (reference_ -> Image ()) ?
161  ((!(reference_ -> isInteger ())) &&
162  reference_ -> Image () -> isCuttable (problem_, reference_ -> Index ())) :
163  (!(reference_ -> isInteger ()));
164  }
165 
167  virtual double intInfeasibility (double value, double lb, double ub) const;
168 
171  {return lp_clamp_;}
172 
174  virtual int columnNumber () const
175  {return (reference_ ? reference_ -> Index () : -1);}
176 
177 protected:
178 
181 
184 
189 
192 
195 
199 
202 
205 
207  bool doFBBT_;
208 
211 
213  mutable double downEstimate_;
214 
216  mutable double upEstimate_;
217 
220 };
221 
222 }
223 
224 #endif
Couenne::CouenneObject::lp_clamp
CouNumber lp_clamp() const
Defines safe interval percentage for using LP point as a branching point.
Definition: CouenneObject.hpp:170
Couenne::CouenneObject::Reference
exprVar * Reference() const
return reference auxiliary variable
Definition: CouenneObject.hpp:114
Couenne::CouenneObject::~CouenneObject
~CouenneObject()
Destructor.
Definition: CouenneObject.hpp:85
Couenne::CouenneObject::pseudoMultType_
enum pseudocostMult pseudoMultType_
multiplier type for pseudocost
Definition: CouenneObject.hpp:219
OsiObject
Couenne::CouenneObject::midInterval
CouNumber midInterval(CouNumber x, CouNumber l, CouNumber u, const OsiBranchingInformation *info=NULL) const
returns a point "inside enough" a given interval, or x if it already is.
Couenne::BRANCH_NONE
@ BRANCH_NONE
Definition: CouenneObject.hpp:41
Couenne::CouenneObject::checkInfeasibility
virtual double checkInfeasibility(const OsiBranchingInformation *info) const
compute infeasibility of this variable, |w - f(x)|, where w is the auxiliary variable defined as w = ...
OsiBranchingObject.hpp
Couenne::isInteger
bool isInteger(CouNumber x)
is this number integer?
Definition: CouenneExpression.hpp:309
Couenne::CouenneObject::clone
virtual CouenneObject * clone() const
Cloning method.
Definition: CouenneObject.hpp:91
Couenne::CouenneObject::MIN_AREA
@ MIN_AREA
Definition: CouenneObject.hpp:71
Couenne::funtriplet
Definition: CouenneFunTriplets.hpp:22
Couenne::CouenneObject::problem_
CouenneProblem * problem_
pointer to Couenne problem
Definition: CouenneObject.hpp:183
Couenne::CouenneObject::setEstimates
void setEstimates(const OsiBranchingInformation *info, CouNumber *infeasibility, CouNumber *brpt) const
set up/down estimates based on branching information
Couenne::THREE_LEFT
@ THREE_LEFT
Definition: CouenneObject.hpp:41
Couenne::CouenneObject::INTERVAL_BR_REV
@ INTERVAL_BR_REV
Definition: CouenneObject.hpp:64
Couenne::CouenneCutGenerator
Cut Generator for linear convexifications.
Definition: CouenneCutGenerator.hpp:49
Couenne::closeToBounds
const CouNumber closeToBounds
Definition: CouenneObject.hpp:33
Couenne::CouenneObject::NO_BRANCH
@ NO_BRANCH
Definition: CouenneObject.hpp:71
Couenne::CouenneObject::INFEASIBILITY
@ INFEASIBILITY
Definition: CouenneObject.hpp:62
Couenne::TWO_LEFT
@ TWO_LEFT
Definition: CouenneObject.hpp:40
Couenne
general include file for different compilers
Definition: CouenneAggrProbing.hpp:24
Bonmin::BabSetupBase
Couenne::CouenneObject::lp_clamp_
CouNumber lp_clamp_
Defines safe interval percentage for using LP point as a branching point.
Definition: CouenneObject.hpp:201
Couenne::CouenneObject::NO_STRATEGY
@ NO_STRATEGY
Definition: CouenneObject.hpp:71
Couenne::CouenneObject::alpha_
CouNumber alpha_
Combination parameter for the mid-point branching point selection strategy.
Definition: CouenneObject.hpp:198
CouenneExprVar.hpp
Couenne::CouenneObject::cutGen_
CouenneCutGenerator * cutGen_
pointer to cut generator (not necessary, can be NULL)
Definition: CouenneObject.hpp:180
Couenne::CouenneObject
OsiObject for auxiliary variables $w=f(x)$.
Definition: CouenneObject.hpp:57
Index
int Index
Couenne::CouenneObject::isCuttable
virtual bool isCuttable() const
are we on the bad or good side of the expression?
Definition: CouenneObject.hpp:159
Couenne::THREE_CENTER
@ THREE_CENTER
Definition: CouenneObject.hpp:41
Couenne::CouenneObject::brSelStrat
brSelStrat
strategy names
Definition: CouenneObject.hpp:71
Couenne::CouenneObject::doFBBT_
bool doFBBT_
shall we do Feasibility based Bound Tightening (FBBT) at branching?
Definition: CouenneObject.hpp:207
Couenne::CouenneObject::pseudocostMult
pseudocostMult
type of up/down estimate to return for pseudocosts
Definition: CouenneObject.hpp:62
Couenne::CouenneObject::LP_CENTRAL
@ LP_CENTRAL
Definition: CouenneObject.hpp:71
Couenne::CouenneObject::createBranch
virtual OsiBranchingObject * createBranch(OsiSolverInterface *, const OsiBranchingInformation *, int) const
create CouenneBranchingObject or CouenneThreeWayBranchObj based on this object
Couenne::CouenneObject::VT_OBJ
@ VT_OBJ
Definition: CouenneObject.hpp:68
Ipopt::SmartPtr< Ipopt::Journalist >
Couenne::CouNumber
double CouNumber
main number type in Couenne
Definition: CouenneTypes.hpp:100
Couenne::CouenneObject::PROJECTDIST
@ PROJECTDIST
Definition: CouenneObject.hpp:65
Couenne::CouenneObject::EXPR_OBJ
@ EXPR_OBJ
Definition: CouenneObject.hpp:68
Couenne::exprVar
variable-type operator
Definition: CouenneExprVar.hpp:45
OsiSolverInterface
Couenne::TWO_RIGHT
@ TWO_RIGHT
Definition: CouenneObject.hpp:40
Couenne::CouenneObject::INTERVAL_BR
@ INTERVAL_BR
Definition: CouenneObject.hpp:64
Couenne::CouenneObject::BALANCED
@ BALANCED
Definition: CouenneObject.hpp:71
Couenne::default_alpha
const CouNumber default_alpha
Definition: CouenneObject.hpp:23
Couenne::CouenneObject::INTERVAL_LP
@ INTERVAL_LP
Definition: CouenneObject.hpp:63
Couenne::CouenneObject::setEstimate
void setEstimate(double est, int direction)
set up/down estimate (0 for down, 1 for up).
Definition: CouenneObject.hpp:150
Couenne::CouenneObject::branch_obj
branch_obj
type of object (for branching variable selection)
Definition: CouenneObject.hpp:68
OsiBranchingInformation
Couenne::CouenneObject::jnlst_
JnlstPtr jnlst_
SmartPointer to the Journalist.
Definition: CouenneObject.hpp:194
Couenne::CouenneObject::getBrPoint
CouNumber getBrPoint(funtriplet *ft, CouNumber x0, CouNumber l, CouNumber u, const OsiBranchingInformation *info=NULL) const
pick branching point based on current strategy
BonBabSetupBase.hpp
Couenne::CouenneObject::doConvCuts_
bool doConvCuts_
shall we add convexification cuts at branching?
Definition: CouenneObject.hpp:210
Couenne::THREE_RIGHT
@ THREE_RIGHT
Definition: CouenneObject.hpp:41
Couenne::CouenneObject::downEstimate_
double downEstimate_
down estimate (to be used in pseudocost)
Definition: CouenneObject.hpp:213
Couenne::CouenneObject::columnNumber
virtual int columnNumber() const
Returns the column index.
Definition: CouenneObject.hpp:174
Couenne::large_bound
const double large_bound
if |branching point| > this, change it
Definition: CouenneObject.hpp:28
Couenne::CouenneObject::LP_CLAMPED
@ LP_CLAMPED
Definition: CouenneObject.hpp:71
Couenne::maxHeight
CouNumber maxHeight(funtriplet *ft, CouNumber lb, CouNumber ub)
Couenne::max_pseudocost
const CouNumber max_pseudocost
Definition: CouenneObject.hpp:25
Couenne::default_clamp
const CouNumber default_clamp
Definition: CouenneObject.hpp:24
Couenne::CouenneObject::upEstimate
virtual double upEstimate() const
Return "up" estimate (for non-convex, distance old <--> new LP point)
Definition: CouenneObject.hpp:138
Couenne::CouenneObject::strategy_
enum brSelStrat strategy_
Branching point selection strategy.
Definition: CouenneObject.hpp:191
Couenne::CouenneObject::CouenneObject
CouenneObject()
empty constructor (for unused objects)
Couenne::THREE_RAND
@ THREE_RAND
Definition: CouenneObject.hpp:41
Couenne::CouenneObject::reference_
exprVar * reference_
The (auxiliary) variable this branching object refers to.
Definition: CouenneObject.hpp:188
OsiBranchingObject
OsiObject::infeasibility
double infeasibility() const
Couenne::CouenneObject::setParameters
void setParameters(Bonmin::BabSetupBase *base)
set object parameters by reading from command line
Couenne::CouenneObject::downEstimate
virtual double downEstimate() const
Return "down" estimate (for non-convex, distance old <--> new LP point)
Definition: CouenneObject.hpp:129
Couenne::CouenneProblem
Class for MINLP problems with symbolic information.
Definition: CouenneProblem.hpp:169
Couenne::CouenneObject::upEstimate_
double upEstimate_
up estimate (to be used in pseudocost)
Definition: CouenneObject.hpp:216
Couenne::CouenneObject::VAR_OBJ
@ VAR_OBJ
Definition: CouenneObject.hpp:68
Couenne::CouenneObject::MID_INTERVAL
@ MID_INTERVAL
Definition: CouenneObject.hpp:71
Couenne::CouenneObject::feasibleRegion
virtual double feasibleRegion(OsiSolverInterface *, const OsiBranchingInformation *) const
fix (one of the) arguments of reference auxiliary variable
Couenne::CouenneObject::Strategy
enum brSelStrat Strategy() const
return branching point selection strategy
Definition: CouenneObject.hpp:118
Couenne::TWO_RAND
@ TWO_RAND
Definition: CouenneObject.hpp:40
Couenne::CouenneObject::intInfeasibility
virtual double intInfeasibility(double value, double lb, double ub) const
integer infeasibility: min {value - floor(value), ceil(value) - value}
Couenne::CouenneObject::INTERVAL_LP_REV
@ INTERVAL_LP_REV
Definition: CouenneObject.hpp:63
CouenneJournalist.hpp
Couenne::CouenneObject::feas_tolerance_
CouNumber feas_tolerance_
feasibility tolerance (equal to that of CouenneProblem)
Definition: CouenneObject.hpp:204
Couenne::minMaxDelta
CouNumber minMaxDelta(funtriplet *ft, CouNumber lb, CouNumber ub)