Bonmin  1.8.8
BonChooseVariable.hpp
Go to the documentation of this file.
1 // Copyright (C) 2006, 2008 International Business Machines
2 // Corporation and others. All Rights Reserved.
3 #ifndef BonChooseVariable_H
4 #define BonChooseVariable_H
5 
6 #include "OsiChooseVariable.hpp"
7 #ifdef BONMIN_CURVATURE_BRANCHING
9 #endif
11 #include "CoinMessageHandler.hpp"
12 #include "BonBabSetupBase.hpp"
13 // Forward declaration
14 class CbcModel;
15 
16 #define OLD_USEFULLNESS
17 
18 namespace Bonmin
19 {
20 
21  class HotInfo : public OsiHotInfo {
22  public:
25 
28  const OsiBranchingInformation *info,
29  const OsiObject * const * objects, int whichObject);
30 
32  HotInfo(const HotInfo & other);
33 
35  HotInfo & operator=(const HotInfo & rhs);
36 
38  virtual OsiHotInfo * clone() const;
39 
41  virtual ~HotInfo();
42 
45  OsiChooseVariable * choose);
46 
48  double upInfeasibility() const{
49  return infeasibilities_[1];
50  }
51 
53  double downInfeasibility() const{
54  return infeasibilities_[0];
55  }
56 
57 
59  void setUpInfeasibility(double x){
60  assert(branchingObject_->numberBranches()==2);
61  infeasibilities_[1] = x;
62  }
63 
65  void setDownInfeasibility(double x){
66  assert(branchingObject_->numberBranches()==2);
67  infeasibilities_[0] = x;
68  }
69  private:
71  vector<double> infeasibilities_;
72  };
73 
82  {
83  protected:
96  virtual int doStrongBranching( OsiSolverInterface * solver,
98  int numberToDo, int returnCriterion);
99 #ifndef OLD_USEFULLNESS
100 
101  enum CandidateSortCriterion {
102  DecrPs = 0,
103  IncrPs,
104  DecrInfeas,
105  IncrInfeas};
106 #endif
107 
114  public:
131  };
132 
133  class Messages : public CoinMessages
134  {
135  public:
137  };
138 
140  int logLevel = handler_->logLevel();
141  delete handler_;
142  handler_ = handler->clone();
143  handler_->setLogLevel(logLevel);
144  }
145 
147  return handler_->message(type, messages_);
148  }
159 
168  };
171 
174 
177 
179  virtual OsiChooseVariable * clone() const;
180 
182  virtual ~BonChooseVariable ();
183 
185 
187  double maxminCrit(const OsiBranchingInformation* info) const;
188  void computeMultipliers(double& upMult, double& downMult) const;
189  double computeUsefulness(const double MAXMIN_CRITERION,
190  const double upMult, const double dowMult,
191  const double value,
192  const OsiObject* object, int i,
193  double& value2) const;
194 
197  virtual int setupList ( OsiBranchingInformation *info, bool initialize);
198 
212  virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, bool fixVariables);
226  virtual void updateInformation(const OsiBranchingInformation *info,
228  int branch, OsiHotInfo * hotInfo);
229 #if 1
230  virtual void updateInformation( int whichObject, int branch,
232  double changeInObjective, double changeInValue,
233  int status);
234 #endif
235 
237  void setCbcModel(CbcModel* cbc_model)
238  {
239  cbc_model_ = cbc_model;
240  }
241 
242  void setOnlyPseudoWhenTrusted(bool only_pseudo_when_trusted)
243  {
244  only_pseudo_when_trusted_ = only_pseudo_when_trusted;
245  }
246 
247 
249  const OsiPseudoCosts & pseudoCosts() const{
250  return pseudoCosts_;}
251 
254  return pseudoCosts_;}
255  protected:
256 
259 
262 
265 
267  int determineStatus(OsiSolverInterface * solver) const {
268  if (solver->isProvenOptimal())
269  return 0; // optimal
270  else if (solver->isIterationLimitReached()
271  &&!solver->isDualObjectiveLimitReached())
272  return 2; // unknown
273  else
274  return 1; // infeasible
275  }
276 
277  private:
280 
282  double time_limit_;
283 
285  double start_time_;
286  protected:
288  CbcModel* cbc_model_;
289 
294 
298 
301 
304  // ToDo: Make this options
324 #ifndef OLD_USEFULLNESS
325 
326  CandidateSortCriterion sortCrit_;
327 #endif
328 
334 
336 
338  bool isRootNode(const OsiBranchingInformation *info) const;
339 
341  static const std::string CNAME;
342  };
343 
344 }
345 #endif
Bonmin::HotInfo::HotInfo
HotInfo(OsiSolverInterface *solver, const OsiBranchingInformation *info, const OsiObject *const *objects, int whichObject)
Constructor from usefull information.
BonBabSetupBase.hpp
Bonmin::BonChooseVariable::maxmin_crit_have_sol_
double maxmin_crit_have_sol_
maxmin weight in branching decision when no solution has been found yet
Definition: BonChooseVariable.hpp:312
Bonmin::BonChooseVariable::handler_
CoinMessageHandler * handler_
Message handler.
Definition: BonChooseVariable.hpp:300
OsiHotInfo::branchingObject_
OsiBranchingObject * branchingObject_
Bonmin::BonChooseVariable::numberLookAhead_
int numberLookAhead_
number of look-ahead strong-branching steps
Definition: BonChooseVariable.hpp:323
Bonmin::BonChooseVariable::NotFinished
@ NotFinished
Child is not finished.
Definition: BonChooseVariable.hpp:113
Bonmin::BonChooseVariable::trustStrongForPseudoCosts_
int trustStrongForPseudoCosts_
Wether or not to trust strong branching results for updating pseudo costs.
Definition: BonChooseVariable.hpp:333
Bonmin::HotInfo::HotInfo
HotInfo(const HotInfo &other)
Copy constructor.
OsiObject
Bonmin::BonChooseVariable::BON_CHOOSE_MESSAGES_DUMMY_END
@ BON_CHOOSE_MESSAGES_DUMMY_END
Definition: BonChooseVariable.hpp:130
OsiChooseVariable.hpp
Bonmin::BonChooseVariable::clone
virtual OsiChooseVariable * clone() const
Clone.
OsiPseudoCosts
Bonmin::BonChooseVariable::doStrongBranching
virtual int doStrongBranching(OsiSolverInterface *solver, OsiBranchingInformation *info, int numberToDo, int returnCriterion)
This is a utility function which does strong branching on a list of objects and stores the results in...
Bonmin::BonChooseVariable::number_not_trusted_
int number_not_trusted_
Number of variables put into the list because there were not trusted.
Definition: BonChooseVariable.hpp:297
Bonmin::BonChooseVariable::setCbcModel
void setCbcModel(CbcModel *cbc_model)
Method for setting CbcModel, which is used to get statusOfSearch.
Definition: BonChooseVariable.hpp:237
CoinMessageHandler::setLogLevel
void setLogLevel(int value)
Bonmin
(C) Copyright International Business Machines Corporation 2007
Definition: BonAmplSetup.hpp:16
Bonmin::BonChooseVariable::maxminCrit
double maxminCrit(const OsiBranchingInformation *info) const
Helper functions for setupList and chooseVariable.
Bonmin::BonChooseVariable::interuptedCanFix
@ interuptedCanFix
Interupted and found a variable to fix.
Definition: BonChooseVariable.hpp:157
CoinMessageHandler::clone
virtual CoinMessageHandler * clone() const
Bonmin::BonChooseVariable::Messages_Types
Messages_Types
Definition: BonChooseVariable.hpp:117
Bonmin::BonChooseVariable::infeasibleNode
@ infeasibleNode
Definition: BonChooseVariable.hpp:162
Bonmin::BonChooseVariable::canFixAndBranch
@ canFixAndBranch
Found variable to fix and also has a (non-strong) branching candidate.
Definition: BonChooseVariable.hpp:166
Bonmin::BonChooseVariable::Messages::Messages
Messages()
Bonmin::BonChooseVariable::jnlst_
Ipopt::SmartPtr< Ipopt::Journalist > jnlst_
Holding on the a pointer to the journalist.
Definition: BonChooseVariable.hpp:258
CoinMessages
Bonmin::BonChooseVariable::UPDATE_PS_COST
@ UPDATE_PS_COST
Definition: BonChooseVariable.hpp:129
Bonmin::BonChooseVariable::canFixNoCandidate
@ canFixNoCandidate
Can fix variables but does not have strong branching candidates.
Definition: BonChooseVariable.hpp:167
Bonmin::BonChooseVariable::CANDIDATE_LIST2
@ CANDIDATE_LIST2
Definition: BonChooseVariable.hpp:122
Bonmin::BonChooseVariable::registerOptions
static void registerOptions(Ipopt::SmartPtr< Bonmin::RegisteredOptions > roptions)
Bonmin::BabSetupBase
A class to have all elements necessary to setup a branch-and-bound.
Definition: BonBabSetupBase.hpp:26
OsiChooseVariable
Bonmin::BonChooseVariable::feasibleNode
@ feasibleNode
All variable are feasible, the node is feasible.
Definition: BonChooseVariable.hpp:164
Bonmin::BonChooseVariable
This class chooses a variable to branch on.
Definition: BonChooseVariable.hpp:82
Bonmin::vector< double >
Bonmin::HotInfo::downInfeasibility
double downInfeasibility() const
down infeasibility
Definition: BonChooseVariable.hpp:53
Bonmin::BonChooseVariable::setupList
virtual int setupList(OsiBranchingInformation *info, bool initialize)
Sets up strong list and clears all if initialize is true.
Bonmin::BonChooseVariable::minNumberStrongBranch_
int minNumberStrongBranch_
Always strong branch that many first candidate in the list regardless of numberTrusted.
Definition: BonChooseVariable.hpp:329
Bonmin::BonChooseVariable::hasCandidate
@ hasCandidate
Normal termination, found a variable to branch on.
Definition: BonChooseVariable.hpp:163
Bonmin::BonChooseVariable::determineStatus
int determineStatus(OsiSolverInterface *solver) const
Determine status of strong branching solution.
Definition: BonChooseVariable.hpp:267
Bonmin::BonChooseVariable::maxmin_crit_no_sol_
double maxmin_crit_no_sol_
maxmin weight in branching decision when no solution has been found yet
Definition: BonChooseVariable.hpp:309
Bonmin::HotInfo::operator=
HotInfo & operator=(const HotInfo &rhs)
Assignment operator.
Bonmin::BonChooseVariable::PS_COST_ESTIMATES
@ PS_COST_ESTIMATES
Definition: BonChooseVariable.hpp:120
Bonmin::BonChooseVariable::Infeasible
@ Infeasible
Child is proven infeasible.
Definition: BonChooseVariable.hpp:112
OsiHotInfo
Ipopt::SmartPtr
Bonmin::BonChooseVariable::pseudoCosts_
OsiPseudoCosts pseudoCosts_
Stores the pseudo costs.
Definition: BonChooseVariable.hpp:331
OsiHotInfo::whichObject
int whichObject() const
Bonmin::BonChooseVariable::CHOSEN_VAR
@ CHOSEN_VAR
Definition: BonChooseVariable.hpp:128
Bonmin::BonChooseVariable::SB_RES
@ SB_RES
Definition: BonChooseVariable.hpp:126
Bonmin::HotInfo::updateInformation
int updateInformation(const OsiSolverInterface *solver, const OsiBranchingInformation *info, OsiChooseVariable *choose)
Fill in some usefull information after a strong branching is done:
Bonmin::BonChooseVariable::operator=
BonChooseVariable & operator=(const BonChooseVariable &rhs)
Assignment operator.
CoinMessageHandler
Bonmin::BonChooseVariable::pseudoCosts
const OsiPseudoCosts & pseudoCosts() const
Access to pseudo costs storage.
Definition: BonChooseVariable.hpp:249
Bonmin::BonChooseVariable::bb_log_level_
int bb_log_level_
verbosity level
Definition: BonChooseVariable.hpp:261
Bonmin::BonChooseVariable::PS_COST_MULT
@ PS_COST_MULT
Definition: BonChooseVariable.hpp:119
OsiSolverInterface::isIterationLimitReached
virtual bool isIterationLimitReached() const=0
Bonmin::BonChooseVariable::setup_pseudo_frac_
double setup_pseudo_frac_
fraction of branching candidates that are not trusted yet
Definition: BonChooseVariable.hpp:314
Bonmin::BonChooseVariable::computeMultipliers
void computeMultipliers(double &upMult, double &downMult) const
Bonmin::BonChooseVariable::chooseVariableReturnStatuses
chooseVariableReturnStatuses
Return statuses for chooseVariable.
Definition: BonChooseVariable.hpp:161
Bonmin::BonChooseVariable::SB_START
@ SB_START
Definition: BonChooseVariable.hpp:124
Bonmin::BonChooseVariable::isRootNode
bool isRootNode(const OsiBranchingInformation *info) const
detecting if this is root node
Bonmin::BonChooseVariable::PS_COST_HISTORY
@ PS_COST_HISTORY
Definition: BonChooseVariable.hpp:118
OsiSolverInterface
Bonmin::BonChooseVariable::doneCanFix
@ doneCanFix
Several variable can be fixed.
Definition: BonChooseVariable.hpp:156
Bonmin::BonChooseVariable::messages_
Messages messages_
Messages.
Definition: BonChooseVariable.hpp:303
Bonmin::BonChooseVariable::passInMessageHandler
void passInMessageHandler(CoinMessageHandler *handler)
Definition: BonChooseVariable.hpp:139
Bonmin::BonChooseVariable::CANDIDATE_LIST
@ CANDIDATE_LIST
Definition: BonChooseVariable.hpp:121
Bonmin::BonChooseVariable::chooseVariable
virtual int chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *info, bool fixVariables)
Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All lo...
Bonmin::HotInfo::HotInfo
HotInfo()
Default constructor.
OsiBranchingInformation
Bonmin::BonChooseVariable::SB_HEADER
@ SB_HEADER
Definition: BonChooseVariable.hpp:125
Bonmin::BonChooseVariable::only_pseudo_when_trusted_
bool only_pseudo_when_trusted_
Flag indicating whether we don't want to mix strong branching and pseudo costs during the decision wh...
Definition: BonChooseVariable.hpp:293
Bonmin::BonChooseVariable::results_
vector< HotInfo > results_
Stores strong branching results.
Definition: BonChooseVariable.hpp:264
Bonmin::BonChooseVariable::setOnlyPseudoWhenTrusted
void setOnlyPseudoWhenTrusted(bool only_pseudo_when_trusted)
Definition: BonChooseVariable.hpp:242
OsiSolverInterface::isProvenOptimal
virtual bool isProvenOptimal() const=0
Bonmin::BonChooseVariable::numberStrongRoot_
int numberStrongRoot_
number of strong branching points at root node
Definition: BonChooseVariable.hpp:319
Bonmin::BonChooseVariable::BRANCH_VAR
@ BRANCH_VAR
Definition: BonChooseVariable.hpp:127
Bonmin::BonChooseVariable::Messages
Definition: BonChooseVariable.hpp:134
OsiSolverInterface::isDualObjectiveLimitReached
virtual bool isDualObjectiveLimitReached() const
Bonmin::BonChooseVariable::cbc_model_
CbcModel * cbc_model_
CbcModel, used to get status of search.
Definition: BonChooseVariable.hpp:288
Bonmin::BonChooseVariable::CANDIDATE_LIST3
@ CANDIDATE_LIST3
Definition: BonChooseVariable.hpp:123
Bonmin::HotInfo::upInfeasibility
double upInfeasibility() const
up infeasibility
Definition: BonChooseVariable.hpp:48
Bonmin::BonChooseVariable::maxTime
@ maxTime
Interupted because of time limit.
Definition: BonChooseVariable.hpp:158
OsiChooseVariable::status
int status() const
Bonmin::BonChooseVariable::pseudoCosts
OsiPseudoCosts & pseudoCosts()
Access to pseudo costs storage.
Definition: BonChooseVariable.hpp:253
CoinMessageHandler::logLevel
int logLevel() const
Bonmin::BonChooseVariable::StrongStatus
StrongStatus
Statuses for strong branching candidates.
Definition: BonChooseVariable.hpp:109
Bonmin::BonChooseVariable::Feasible
@ Feasible
Child is proven feasible.
Definition: BonChooseVariable.hpp:111
Bonmin::BonChooseVariable::computeUsefulness
double computeUsefulness(const double MAXMIN_CRITERION, const double upMult, const double dowMult, const double value, const OsiObject *object, int i, double &value2) const
Bonmin::BonChooseVariable::~BonChooseVariable
virtual ~BonChooseVariable()
Destructor.
CoinMessageHandler::message
CoinMessageHandler & message(int messageNumber, const CoinMessages &messages)
Bonmin::BonChooseVariable::canFixAndStrongBranch
@ canFixAndStrongBranch
Found variable to fix and also has remaining candidate for strong branching.
Definition: BonChooseVariable.hpp:165
Bonmin::BonChooseVariable::BonChooseVariable
BonChooseVariable(BabSetupBase &b, const OsiSolverInterface *solver)
Constructor from solver (so we can set up arrays etc)
Bonmin::HotInfo::setDownInfeasibility
void setDownInfeasibility(double x)
Set the down infeasibility.
Definition: BonChooseVariable.hpp:65
Bonmin::BonChooseVariable::numberBeforeTrustedList_
int numberBeforeTrustedList_
number of times a branch has to happen so that it is trusted in setupList
Definition: BonChooseVariable.hpp:317
Bonmin::BonChooseVariable::message
CoinMessageHandler & message(Messages_Types type) const
Definition: BonChooseVariable.hpp:146
Bonmin::HotInfo
Definition: BonChooseVariable.hpp:21
Bonmin::BonChooseVariable::CNAME
static const std::string CNAME
Stores the class name for throwing errors.
Definition: BonChooseVariable.hpp:341
Bonmin::HotInfo::clone
virtual OsiHotInfo * clone() const
Clone.
Bonmin::BonChooseVariable::updateInformation
virtual void updateInformation(const OsiBranchingInformation *info, int branch, OsiHotInfo *hotInfo)
This is a utility function which does strong branching on a list of objects and stores the results in...
OsiBranchingObject::numberBranches
int numberBranches() const
BonCurvatureEstimator.hpp
Bonmin::BonChooseVariable::DoStrongReturnStatuses
DoStrongReturnStatuses
Definition: BonChooseVariable.hpp:153
Bonmin::BonChooseVariable::NotDone
@ NotDone
Definition: BonChooseVariable.hpp:110
Bonmin::BonChooseVariable::doneNoFixing
@ doneNoFixing
All done no variable can be fixed.
Definition: BonChooseVariable.hpp:155
Bonmin::BonChooseVariable::numberStrongBackup_
int numberStrongBackup_
backup of numberStrong_ before Root node solve
Definition: BonChooseVariable.hpp:321
Bonmin::HotInfo::setUpInfeasibility
void setUpInfeasibility(double x)
Set the down infeasibility.
Definition: BonChooseVariable.hpp:59
Bonmin::HotInfo::~HotInfo
virtual ~HotInfo()
Destructor.
Bonmin::BonChooseVariable::provenInfeasible
@ provenInfeasible
Definition: BonChooseVariable.hpp:154
Bonmin::BonChooseVariable::BonChooseVariable
BonChooseVariable(const BonChooseVariable &)
Copy constructor.
CoinMessageHandler.hpp
BonOsiTMINLPInterface.hpp