Bonmin 1.8.9
Loading...
Searching...
No Matches
Bonmin::BonChooseVariable Class Reference

This class chooses a variable to branch on. More...

#include <BonChooseVariable.hpp>

+ Inheritance diagram for Bonmin::BonChooseVariable:
+ Collaboration diagram for Bonmin::BonChooseVariable:

Classes

class  Messages
 

Public Types

enum  DoStrongReturnStatuses {
  provenInfeasible = -1 , doneNoFixing , doneCanFix , interuptedCanFix ,
  maxTime
}
 
enum  chooseVariableReturnStatuses {
  infeasibleNode = -1 , hasCandidate , feasibleNode , canFixAndStrongBranch ,
  canFixAndBranch , canFixNoCandidate
}
 Return statuses for chooseVariable. More...
 

Public Member Functions

 BonChooseVariable (BabSetupBase &b, const OsiSolverInterface *solver)
 Constructor from solver (so we can set up arrays etc)
 
 BonChooseVariable (const BonChooseVariable &)
 Copy constructor.
 
BonChooseVariableoperator= (const BonChooseVariable &rhs)
 Assignment operator.
 
virtual OsiChooseVariableclone () const
 Clone.
 
virtual ~BonChooseVariable ()
 Destructor.
 
double maxminCrit (const OsiBranchingInformation *info) const
 Helper functions for setupList and chooseVariable.
 
void computeMultipliers (double &upMult, double &downMult) const
 
double computeUsefulness (const double MAXMIN_CRITERION, const double upMult, const double dowMult, const double value, const OsiObject *object, int i, double &value2) const
 
virtual int setupList (OsiBranchingInformation *info, bool initialize)
 Sets up strong list and clears all if initialize is true.
 
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 looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() If fixVariables is true then 2,3,4 are all really same as problem changed.
 
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 OsiHotInfo.objects.
 
virtual void updateInformation (int whichObject, int branch, double changeInObjective, double changeInValue, int status)
 Given a branch fill in useful information e.g. estimates.
 
void setCbcModel (CbcModel *cbc_model)
 Method for setting CbcModel, which is used to get statusOfSearch.
 
void setOnlyPseudoWhenTrusted (bool only_pseudo_when_trusted)
 
const OsiPseudoCostspseudoCosts () const
 Access to pseudo costs storage.
 
OsiPseudoCostspseudoCosts ()
 Access to pseudo costs storage.
 
- Public Member Functions inherited from OsiChooseVariable
 OsiChooseVariable ()
 
 OsiChooseVariable (const OsiSolverInterface *solver)
 
 OsiChooseVariable (const OsiChooseVariable &)
 
OsiChooseVariableoperator= (const OsiChooseVariable &rhs)
 
virtual ~OsiChooseVariable ()
 
virtual bool feasibleSolution (const OsiBranchingInformation *info, const double *solution, int numberObjects, const OsiObject **objects)
 
void saveSolution (const OsiSolverInterface *solver)
 
void clearGoodSolution ()
 
double goodObjectiveValue () const
 
double upChange () const
 
double downChange () const
 
const double * goodSolution () const
 
int bestObjectIndex () const
 
void setBestObjectIndex (int value)
 
int bestWhichWay () const
 
void setBestWhichWay (int value)
 
int firstForcedObjectIndex () const
 
void setFirstForcedObjectIndex (int value)
 
int firstForcedWhichWay () const
 
void setFirstForcedWhichWay (int value)
 
int numberUnsatisfied () const
 
int numberStrong () const
 
void setNumberStrong (int value)
 
int numberOnList () const
 
int numberStrongDone () const
 
int numberStrongIterations () const
 
int numberStrongFixed () const
 
const int * candidates () const
 
bool trustStrongForBound () const
 
void setTrustStrongForBound (bool yesNo)
 
bool trustStrongForSolution () const
 
void setTrustStrongForSolution (bool yesNo)
 
void setSolver (const OsiSolverInterface *solver)
 
int status () const
 
void setStatus (int value)
 

Static Public Member Functions

static void registerOptions (Ipopt::SmartPtr< Bonmin::RegisteredOptions > roptions)
 

Protected Types

enum  StrongStatus { NotDone =-1 , Feasible , Infeasible , NotFinished }
 Statuses for strong branching candidates. More...
 

Protected Member Functions

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 OsiHotInfo.objects.
 
int determineStatus (OsiSolverInterface *solver) const
 Determine status of strong branching solution.
 

Protected Attributes

Ipopt::SmartPtr< Ipopt::Journalistjnlst_
 Holding on the a pointer to the journalist.
 
int bb_log_level_
 verbosity level
 
vector< HotInforesults_
 Stores strong branching results.
 
CbcModel * cbc_model_
 CbcModel, used to get status of search.
 
bool only_pseudo_when_trusted_
 Flag indicating whether we don't want to mix strong branching and pseudo costs during the decision which variable to branch on.
 
int number_not_trusted_
 Number of variables put into the list because there were not trusted.
 
CoinMessageHandlerhandler_
 Message handler.
 
Messages messages_
 Messages.
 
- Protected Attributes inherited from OsiChooseVariable
double goodObjectiveValue_
 
double upChange_
 
double downChange_
 
double * goodSolution_
 
int * list_
 
double * useful_
 
const OsiSolverInterfacesolver_
 
int status_
 
int bestObjectIndex_
 
int bestWhichWay_
 
int firstForcedObjectIndex_
 
int firstForcedWhichWay_
 
int numberUnsatisfied_
 
int numberStrong_
 
int numberOnList_
 
int numberStrongDone_
 
int numberStrongIterations_
 
int numberStrongFixed_
 
bool trustStrongForBound_
 
bool trustStrongForSolution_
 

Message handling.

enum  Messages_Types {
  PS_COST_HISTORY = 0 , PS_COST_MULT , PS_COST_ESTIMATES , CANDIDATE_LIST ,
  CANDIDATE_LIST2 , CANDIDATE_LIST3 , SB_START , SB_HEADER ,
  SB_RES , BRANCH_VAR , CHOSEN_VAR , UPDATE_PS_COST ,
  BON_CHOOSE_MESSAGES_DUMMY_END
}
 
void passInMessageHandler (CoinMessageHandler *handler)
 
CoinMessageHandlermessage (Messages_Types type) const
 

Algoirithmic options

double maxmin_crit_no_sol_
 maxmin weight in branching decision when no solution has been found yet
 
double maxmin_crit_have_sol_
 maxmin weight in branching decision when no solution has been found yet
 
double setup_pseudo_frac_
 fraction of branching candidates that are not trusted yet
 
int numberBeforeTrustedList_
 number of times a branch has to happen so that it is trusted in setupList
 
int numberStrongRoot_
 number of strong branching points at root node
 
int numberStrongBackup_
 backup of numberStrong_ before Root node solve
 
int numberLookAhead_
 number of look-ahead strong-branching steps
 
int minNumberStrongBranch_
 Always strong branch that many first candidate in the list regardless of numberTrusted.
 
OsiPseudoCosts pseudoCosts_
 Stores the pseudo costs.
 
int trustStrongForPseudoCosts_
 Wether or not to trust strong branching results for updating pseudo costs.
 
static const std::string CNAME
 Stores the class name for throwing errors.
 
bool isRootNode (const OsiBranchingInformation *info) const
 detecting if this is root node
 

Detailed Description

This class chooses a variable to branch on.

This is the base class for the branching rules in Bonmin (inherits from OsiChooseVariable). This class implements a simple strong branching algorithm where the changes in the objective value induced by branching on a specific object are estimated with the pure virtual function fill_changes.

Definition at line 81 of file BonChooseVariable.hpp.

Member Enumeration Documentation

◆ StrongStatus

Statuses for strong branching candidates.

Enumerator
NotDone 
Feasible 

Child is proven feasible.

Infeasible 

Child is proven infeasible.

NotFinished 

Child is not finished.

Definition at line 109 of file BonChooseVariable.hpp.

◆ Messages_Types

Enumerator
PS_COST_HISTORY 
PS_COST_MULT 
PS_COST_ESTIMATES 
CANDIDATE_LIST 
CANDIDATE_LIST2 
CANDIDATE_LIST3 
SB_START 
SB_HEADER 
SB_RES 
BRANCH_VAR 
CHOSEN_VAR 
UPDATE_PS_COST 
BON_CHOOSE_MESSAGES_DUMMY_END 

Definition at line 117 of file BonChooseVariable.hpp.

◆ DoStrongReturnStatuses

Enumerator
provenInfeasible 
doneNoFixing 

All done no variable can be fixed.

doneCanFix 

Several variable can be fixed.

interuptedCanFix 

Interrupted and found a variable to fix.

maxTime 

Interrupted because of time limit.

Definition at line 153 of file BonChooseVariable.hpp.

◆ chooseVariableReturnStatuses

Return statuses for chooseVariable.

Enumerator
infeasibleNode 
hasCandidate 

Normal termination, found a variable to branch on.

feasibleNode 

All variable are feasible, the node is feasible.

canFixAndStrongBranch 

Found variable to fix and also has remaining candidate for strong branching.

canFixAndBranch 

Found variable to fix and also has a (non-strong) branching candidate.

canFixNoCandidate 

Can fix variables but does not have strong branching candidates.

Definition at line 161 of file BonChooseVariable.hpp.

Constructor & Destructor Documentation

◆ BonChooseVariable() [1/2]

Bonmin::BonChooseVariable::BonChooseVariable ( BabSetupBase & b,
const OsiSolverInterface * solver )

Constructor from solver (so we can set up arrays etc)

◆ BonChooseVariable() [2/2]

Bonmin::BonChooseVariable::BonChooseVariable ( const BonChooseVariable & )

Copy constructor.

◆ ~BonChooseVariable()

virtual Bonmin::BonChooseVariable::~BonChooseVariable ( )
virtual

Destructor.

Member Function Documentation

◆ doStrongBranching()

virtual int Bonmin::BonChooseVariable::doStrongBranching ( OsiSolverInterface * solver,
OsiBranchingInformation * info,
int numberToDo,
int returnCriterion )
protectedvirtual

This is a utility function which does strong branching on a list of objects and stores the results in OsiHotInfo.objects.

On entry the object sequence is stored in the OsiHotInfo object and maybe more. It returns - -1 - one branch was infeasible both ways 0 - all inspected - nothing can be fixed 1 - all inspected - some can be fixed (returnCriterion==0) 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) 3 - returning because max time

◆ passInMessageHandler()

void Bonmin::BonChooseVariable::passInMessageHandler ( CoinMessageHandler * handler)
inline

Definition at line 139 of file BonChooseVariable.hpp.

◆ message()

CoinMessageHandler & Bonmin::BonChooseVariable::message ( Messages_Types type) const
inline

Definition at line 146 of file BonChooseVariable.hpp.

◆ operator=()

BonChooseVariable & Bonmin::BonChooseVariable::operator= ( const BonChooseVariable & rhs)

Assignment operator.

◆ clone()

virtual OsiChooseVariable * Bonmin::BonChooseVariable::clone ( ) const
virtual

Clone.

Reimplemented from OsiChooseVariable.

◆ registerOptions()

static void Bonmin::BonChooseVariable::registerOptions ( Ipopt::SmartPtr< Bonmin::RegisteredOptions > roptions)
static

◆ maxminCrit()

double Bonmin::BonChooseVariable::maxminCrit ( const OsiBranchingInformation * info) const

Helper functions for setupList and chooseVariable.

◆ computeMultipliers()

void Bonmin::BonChooseVariable::computeMultipliers ( double & upMult,
double & downMult ) const

◆ computeUsefulness()

double Bonmin::BonChooseVariable::computeUsefulness ( const double MAXMIN_CRITERION,
const double upMult,
const double dowMult,
const double value,
const OsiObject * object,
int i,
double & value2 ) const

◆ setupList()

virtual int Bonmin::BonChooseVariable::setupList ( OsiBranchingInformation * info,
bool initialize )
virtual

Sets up strong list and clears all if initialize is true.

Returns number of infeasibilities.

Reimplemented from OsiChooseVariable.

◆ chooseVariable()

virtual int Bonmin::BonChooseVariable::chooseVariable ( OsiSolverInterface * solver,
OsiBranchingInformation * info,
bool fixVariables )
virtual

Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() If fixVariables is true then 2,3,4 are all really same as problem changed.

Reimplemented from OsiChooseVariable.

◆ updateInformation() [1/2]

virtual void Bonmin::BonChooseVariable::updateInformation ( const OsiBranchingInformation * info,
int branch,
OsiHotInfo * hotInfo )
virtual

This is a utility function which does strong branching on a list of objects and stores the results in OsiHotInfo.objects.

On entry the object sequence is stored in the OsiHotInfo object and maybe more. It returns - -1 - one branch was infeasible both ways 0 - all inspected - nothing can be fixed 1 - all inspected - some can be fixed (returnCriterion==0) 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) 3 - returning because max time Given a candidate fill in useful information e.g. estimates

Reimplemented from OsiChooseVariable.

◆ updateInformation() [2/2]

virtual void Bonmin::BonChooseVariable::updateInformation ( int whichObject,
int branch,
double changeInObjective,
double changeInValue,
int status )
virtual

Given a branch fill in useful information e.g. estimates.

Reimplemented from OsiChooseVariable.

◆ setCbcModel()

void Bonmin::BonChooseVariable::setCbcModel ( CbcModel * cbc_model)
inline

Method for setting CbcModel, which is used to get statusOfSearch.

Definition at line 237 of file BonChooseVariable.hpp.

◆ setOnlyPseudoWhenTrusted()

void Bonmin::BonChooseVariable::setOnlyPseudoWhenTrusted ( bool only_pseudo_when_trusted)
inline

Definition at line 242 of file BonChooseVariable.hpp.

◆ pseudoCosts() [1/2]

const OsiPseudoCosts & Bonmin::BonChooseVariable::pseudoCosts ( ) const
inline

Access to pseudo costs storage.

Definition at line 249 of file BonChooseVariable.hpp.

◆ pseudoCosts() [2/2]

OsiPseudoCosts & Bonmin::BonChooseVariable::pseudoCosts ( )
inline

Access to pseudo costs storage.

Definition at line 253 of file BonChooseVariable.hpp.

◆ determineStatus()

int Bonmin::BonChooseVariable::determineStatus ( OsiSolverInterface * solver) const
inlineprotected

Determine status of strong branching solution.

Definition at line 267 of file BonChooseVariable.hpp.

◆ isRootNode()

bool Bonmin::BonChooseVariable::isRootNode ( const OsiBranchingInformation * info) const
protected

detecting if this is root node

Member Data Documentation

◆ jnlst_

Ipopt::SmartPtr<Ipopt::Journalist> Bonmin::BonChooseVariable::jnlst_
protected

Holding on the a pointer to the journalist.

Definition at line 258 of file BonChooseVariable.hpp.

◆ bb_log_level_

int Bonmin::BonChooseVariable::bb_log_level_
protected

verbosity level

Definition at line 261 of file BonChooseVariable.hpp.

◆ results_

vector<HotInfo> Bonmin::BonChooseVariable::results_
protected

Stores strong branching results.

Definition at line 264 of file BonChooseVariable.hpp.

◆ cbc_model_

CbcModel* Bonmin::BonChooseVariable::cbc_model_
protected

CbcModel, used to get status of search.

Definition at line 288 of file BonChooseVariable.hpp.

◆ only_pseudo_when_trusted_

bool Bonmin::BonChooseVariable::only_pseudo_when_trusted_
protected

Flag indicating whether we don't want to mix strong branching and pseudo costs during the decision which variable to branch on.

Definition at line 293 of file BonChooseVariable.hpp.

◆ number_not_trusted_

int Bonmin::BonChooseVariable::number_not_trusted_
protected

Number of variables put into the list because there were not trusted.

Definition at line 297 of file BonChooseVariable.hpp.

◆ handler_

CoinMessageHandler* Bonmin::BonChooseVariable::handler_
protected

Message handler.

Definition at line 300 of file BonChooseVariable.hpp.

◆ messages_

Messages Bonmin::BonChooseVariable::messages_
protected

Messages.

Definition at line 303 of file BonChooseVariable.hpp.

◆ maxmin_crit_no_sol_

double Bonmin::BonChooseVariable::maxmin_crit_no_sol_
protected

maxmin weight in branching decision when no solution has been found yet

Definition at line 309 of file BonChooseVariable.hpp.

◆ maxmin_crit_have_sol_

double Bonmin::BonChooseVariable::maxmin_crit_have_sol_
protected

maxmin weight in branching decision when no solution has been found yet

Definition at line 312 of file BonChooseVariable.hpp.

◆ setup_pseudo_frac_

double Bonmin::BonChooseVariable::setup_pseudo_frac_
protected

fraction of branching candidates that are not trusted yet

Definition at line 314 of file BonChooseVariable.hpp.

◆ numberBeforeTrustedList_

int Bonmin::BonChooseVariable::numberBeforeTrustedList_
protected

number of times a branch has to happen so that it is trusted in setupList

Definition at line 317 of file BonChooseVariable.hpp.

◆ numberStrongRoot_

int Bonmin::BonChooseVariable::numberStrongRoot_
protected

number of strong branching points at root node

Definition at line 319 of file BonChooseVariable.hpp.

◆ numberStrongBackup_

int Bonmin::BonChooseVariable::numberStrongBackup_
protected

backup of numberStrong_ before Root node solve

Definition at line 321 of file BonChooseVariable.hpp.

◆ numberLookAhead_

int Bonmin::BonChooseVariable::numberLookAhead_
protected

number of look-ahead strong-branching steps

Definition at line 323 of file BonChooseVariable.hpp.

◆ minNumberStrongBranch_

int Bonmin::BonChooseVariable::minNumberStrongBranch_
protected

Always strong branch that many first candidate in the list regardless of numberTrusted.

Definition at line 329 of file BonChooseVariable.hpp.

◆ pseudoCosts_

OsiPseudoCosts Bonmin::BonChooseVariable::pseudoCosts_
protected

Stores the pseudo costs.

Definition at line 331 of file BonChooseVariable.hpp.

◆ trustStrongForPseudoCosts_

int Bonmin::BonChooseVariable::trustStrongForPseudoCosts_
protected

Wether or not to trust strong branching results for updating pseudo costs.

Definition at line 333 of file BonChooseVariable.hpp.

◆ CNAME

const std::string Bonmin::BonChooseVariable::CNAME
staticprotected

Stores the class name for throwing errors.

Definition at line 341 of file BonChooseVariable.hpp.


The documentation for this class was generated from the following file: