3 #ifndef BonChooseVariable_H 
    4 #define BonChooseVariable_H 
    6 #include "OsiChooseVariable.hpp" 
    7 #ifdef BONMIN_CURVATURE_BRANCHING 
   11 #include "CoinMessageHandler.hpp" 
   16 #define OLD_USEFULLNESS 
   27     HotInfo( OsiSolverInterface * solver,
 
   28              const OsiBranchingInformation *info,
 
   29              const OsiObject * 
const * objects, 
int whichObject);
 
   38     virtual OsiHotInfo * 
clone() 
const;
 
   44     int updateInformation( 
const OsiSolverInterface * solver, 
const OsiBranchingInformation * info,
 
   45                            OsiChooseVariable * choose);
 
   60       assert(branchingObject_->numberBranches()==2);
 
   66       assert(branchingObject_->numberBranches()==2);
 
   97                                  OsiBranchingInformation *info,
 
   98                                  int numberToDo, 
int returnCriterion);
 
   99 #ifndef OLD_USEFULLNESS 
  101     enum CandidateSortCriterion {
 
  140       int logLevel = 
handler_->logLevel();
 
  179     virtual OsiChooseVariable * 
clone() 
const;
 
  184     static void registerOptions(Ipopt::SmartPtr<Bonmin::RegisteredOptions> roptions);
 
  187     double maxminCrit(
const OsiBranchingInformation* info) 
const;
 
  190         const double upMult, 
const double dowMult,
 
  192         const OsiObject* 
object, 
int i,
 
  193         double& value2) 
const;
 
  197     virtual int setupList ( OsiBranchingInformation *info, 
bool initialize);
 
  212     virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, 
bool fixVariables);
 
  228         int branch, OsiHotInfo * hotInfo);
 
  232         double changeInObjective, 
double changeInValue,
 
  258     Ipopt::SmartPtr<Ipopt::Journalist> 
jnlst_;
 
  268       if (solver->isProvenOptimal())
 
  270       else if (solver->isIterationLimitReached()
 
  271                &&!solver->isDualObjectiveLimitReached())
 
  324 #ifndef OLD_USEFULLNESS 
  326     CandidateSortCriterion sortCrit_;
 
  338     bool isRootNode(
const OsiBranchingInformation *info) 
const;
 
Normal termination, found a variable to branch on. 
 
chooseVariableReturnStatuses
Return statuses for chooseVariable. 
 
HotInfo()
Default constructor. 
 
void setOnlyPseudoWhenTrusted(bool only_pseudo_when_trusted)
 
void setCbcModel(CbcModel *cbc_model)
Method for setting CbcModel, which is used to get statusOfSearch. 
 
double setup_pseudo_frac_
fraction of branching candidates that are not trusted yet 
 
This class chooses a variable to branch on. 
 
Can fix variables but does not have strong branching candidates. 
 
bool only_pseudo_when_trusted_
Flag indicating whether we don't want to mix strong branching and pseudo costs during the decision wh...
 
int trustStrongForPseudoCosts_
Wether or not to trust strong branching results for updating pseudo costs. 
 
double downInfeasibility() const 
down infeasibility 
 
bool isRootNode(const OsiBranchingInformation *info) const 
detecting if this is root node 
 
virtual OsiHotInfo * clone() const 
Clone. 
 
Ipopt::SmartPtr< Ipopt::Journalist > jnlst_
Holding on the a pointer to the journalist. 
 
double maxmin_crit_no_sol_
maxmin weight in branching decision when no solution has been found yet 
 
double computeUsefulness(const double MAXMIN_CRITERION, const double upMult, const double dowMult, const double value, const OsiObject *object, int i, double &value2) const 
 
double maxminCrit(const OsiBranchingInformation *info) const 
Helper functions for setupList and chooseVariable. 
 
Found variable to fix and also has remaining candidate for strong branching. 
 
int numberStrongBackup_
backup of numberStrong_ before Root node solve 
 
BonChooseVariable & operator=(const BonChooseVariable &rhs)
Assignment operator. 
 
double maxmin_crit_have_sol_
maxmin weight in branching decision when no solution has been found yet 
 
void passInMessageHandler(CoinMessageHandler *handler)
 
static const std::string CNAME
Stores the class name for throwing errors. 
 
int minNumberStrongBranch_
Always strong branch that many first candidate in the list regardless of numberTrusted. 
 
HotInfo & operator=(const HotInfo &rhs)
Assignment operator. 
 
vector< HotInfo > results_
Stores strong branching results. 
 
virtual ~BonChooseVariable()
Destructor. 
 
All variable are feasible, the node is feasible. 
 
CoinMessageHandler & message(Messages_Types type) const 
 
All done no variable can be fixed. 
 
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...
 
const OsiPseudoCosts & pseudoCosts() const 
Access to pseudo costs storage. 
 
OsiPseudoCosts & pseudoCosts()
Access to pseudo costs storage. 
 
void setDownInfeasibility(double x)
Set the down infeasibility. 
 
A class to have all elements necessary to setup a branch-and-bound. 
 
static void registerOptions(Ipopt::SmartPtr< Bonmin::RegisteredOptions > roptions)
 
Messages messages_
Messages. 
 
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...
 
Interupted and found a variable to fix. 
 
StrongStatus
Statuses for strong branching candidates. 
 
int bb_log_level_
verbosity level 
 
Child is proven infeasible. 
 
Found variable to fix and also has a (non-strong) branching candidate. 
 
CoinMessageHandler * handler_
Message handler. 
 
int number_not_trusted_
Number of variables put into the list because there were not trusted. 
 
int numberLookAhead_
number of look-ahead strong-branching steps 
 
Child is proven feasible. 
 
double time_limit_
Global time limit for algorithm. 
 
CbcModel * cbc_model_
CbcModel, used to get status of search. 
 
void computeMultipliers(double &upMult, double &downMult) const 
 
int numberBeforeTrustedList_
number of times a branch has to happen so that it is trusted in setupList 
 
vector< double > infeasibilities_
infeasibilities of children 
 
int updateInformation(const OsiSolverInterface *solver, const OsiBranchingInformation *info, OsiChooseVariable *choose)
Fill in some usefull information after a strong branching is done: 
 
OsiPseudoCosts pseudoCosts_
Stores the pseudo costs. 
 
Several variable can be fixed. 
 
void setUpInfeasibility(double x)
Set the down infeasibility. 
 
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...
 
virtual int setupList(OsiBranchingInformation *info, bool initialize)
Sets up strong list and clears all if initialize is true. 
 
double upInfeasibility() const 
up infeasibility 
 
virtual OsiChooseVariable * clone() const 
Clone. 
 
BonChooseVariable()
Default Constructor, forbiden for some reason. 
 
virtual ~HotInfo()
Destructor. 
 
int numberStrongRoot_
number of strong branching points at root node 
 
int determineStatus(OsiSolverInterface *solver) const 
Determine status of strong branching solution. 
 
Interupted because of time limit. 
 
double start_time_
Starting time of algorithm.