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;
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,
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;
virtual OsiHotInfo * clone() const
Clone.
Normal termination, found a variable to branch on.
chooseVariableReturnStatuses
Return statuses for chooseVariable.
static void registerOptions(Ipopt::SmartPtr< Bonmin::RegisteredOptions > roptions)
HotInfo()
Default constructor.
virtual int setupList(OsiBranchingInformation *info, bool initialize)
Sets up strong list and clears all if initialize is true.
virtual ~BonChooseVariable()
Destructor.
void setOnlyPseudoWhenTrusted(bool only_pseudo_when_trusted)
virtual ~HotInfo()
Destructor.
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.
void fint fint fint real fint real real real real real real real real real fint real fint fint fint real fint fint fint fint * info
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
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
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...
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
virtual OsiChooseVariable * clone() const
Clone.
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.
vector< HotInfo > results_
Stores strong branching results.
HotInfo & operator=(const HotInfo &rhs)
Assignment operator.
All variable are feasible, the node is feasible.
CoinMessageHandler & message(Messages_Types type) const
All done no variable can be fixed.
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.
Messages messages_
Messages.
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.
double upInfeasibility() const
up infeasibility
BonChooseVariable()
Default Constructor, forbiden for some reason.
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.
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...
BonChooseVariable & operator=(const BonChooseVariable &rhs)
Assignment operator.
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...
double start_time_
Starting time of algorithm.
void fint fint fint real fint real * x