#include <CouenneChooseStrong.hpp>
Inheritance diagram for CouenneChooseStrong:
Public Member Functions | |
CouenneChooseStrong (Bonmin::BabSetupBase &b, CouenneProblem *problem, JnlstPtr jnlst) | |
Constructor from solver (so we can set up arrays etc). | |
CouenneChooseStrong (const CouenneChooseStrong &) | |
Copy constructor. | |
CouenneChooseStrong & | operator= (const CouenneChooseStrong &rhs) |
Assignment operator. | |
virtual OsiChooseVariable * | clone () const |
Clone. | |
virtual | ~CouenneChooseStrong () |
Destructor. | |
virtual int | setupList (OsiBranchingInformation *info, bool initialize) |
Sets up strong list and clears all if initialize is true. | |
virtual int | doStrongBranching (OsiSolverInterface *OsiSolver, 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. | |
virtual bool | feasibleSolution (const OsiBranchingInformation *info, const double *solution, int numberObjects, const OsiObject **objects) |
Returns true if solution looks feasible against given objects. | |
virtual int | chooseVariable (OsiSolverInterface *solver, OsiBranchingInformation *info, bool fixVariables) |
choose object to branch based on earlier setup | |
Static Public Member Functions | |
static void | registerOptions (Ipopt::SmartPtr< Bonmin::RegisteredOptions > roptions) |
Add list of options to be read from file. | |
Protected Member Functions | |
int | simulateBranch (OsiObject *Object, OsiBranchingInformation *info, OsiBranchingObject *branch, OsiSolverInterface *solver, Bonmin::HotInfo *result, int direction) |
does one side of the branching | |
Protected Attributes | |
CouenneProblem * | problem_ |
Pointer to the associated MINLP problem. | |
bool | pseudoUpdateLP_ |
should we update the pseudocost multiplier with the distance between the LP point and the solution of the resulting branches' LPs? If so, this only happens in strong branching | |
bool | estimateProduct_ |
Normally, a convex combination of the min/max lower bounds' estimates is taken to select a branching variable, as in the original definition of strong branching. | |
JnlstPtr | jnlst_ |
pointer to journalist for detailed information | |
double | branchtime_ |
total time spent in strong branching | |
Private Member Functions | |
CouenneChooseStrong () | |
Default Constructor, forbidden for some reason. |
Definition at line 21 of file CouenneChooseStrong.hpp.
CouenneChooseStrong::CouenneChooseStrong | ( | Bonmin::BabSetupBase & | b, | |
CouenneProblem * | problem, | |||
JnlstPtr | jnlst | |||
) |
Constructor from solver (so we can set up arrays etc).
Definition at line 21 of file CouenneChooseStrong.cpp.
References estimateProduct_, Bonmin::BabSetupBase::options(), pseudoUpdateLP_, and s.
CouenneChooseStrong::CouenneChooseStrong | ( | const CouenneChooseStrong & | ) |
CouenneChooseStrong::~CouenneChooseStrong | ( | ) | [virtual] |
Destructor.
Definition at line 48 of file CouenneChooseStrong.cpp.
References branchtime_, e, J_BRANCHING(), and jnlst_.
CouenneChooseStrong::CouenneChooseStrong | ( | ) | [private] |
CouenneChooseStrong & CouenneChooseStrong::operator= | ( | const CouenneChooseStrong & | rhs | ) |
Assignment operator.
Definition at line 58 of file CouenneChooseStrong.cpp.
References branchtime_, estimateProduct_, jnlst_, Bonmin::BonChooseVariable::operator=(), problem_, and pseudoUpdateLP_.
OsiChooseVariable * CouenneChooseStrong::clone | ( | ) | const [virtual] |
Clone.
Reimplemented from Bonmin::BonChooseVariable.
Definition at line 53 of file CouenneChooseStrong.cpp.
References CouenneChooseStrong().
Referenced by simulateBranch().
int CouenneChooseStrong::setupList | ( | OsiBranchingInformation * | info, | |
bool | initialize | |||
) | [virtual] |
Sets up strong list and clears all if initialize is true.
Returns number of infeasibilities.
Reimplemented from Bonmin::BonChooseVariable.
Definition at line 310 of file CouenneChooseStrong.cpp.
References J_BRANCHING(), jnlst_, problem_, and Bonmin::BonChooseVariable::setupList().
int CouenneChooseStrong::doStrongBranching | ( | OsiSolverInterface * | OsiSolver, | |
OsiBranchingInformation * | info, | |||
int | numberToDo, | |||
int | returnCriterion | |||
) | [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
Reimplemented from Bonmin::BonChooseVariable.
Definition at line 58 of file doStrongBranching.cpp.
References branchtime_, t_chg_bounds::CHANGED, COUENNE_EPS, J_BRANCHING(), jnlst_, CouenneProblem::Lb(), problem_, pseudoUpdateLP_, Bonmin::BonChooseVariable::results_, simulateBranch(), and CouenneProblem::Ub().
Referenced by chooseVariable().
bool CouenneChooseStrong::feasibleSolution | ( | const OsiBranchingInformation * | info, | |
const double * | solution, | |||
int | numberObjects, | |||
const OsiObject ** | objects | |||
) | [virtual] |
Returns true if solution looks feasible against given objects.
Definition at line 376 of file CouenneChooseStrong.cpp.
References problem_.
int CouenneChooseStrong::chooseVariable | ( | OsiSolverInterface * | solver, | |
OsiBranchingInformation * | info, | |||
bool | fixVariables | |||
) | [virtual] |
choose object to branch based on earlier setup
Note: had to copy code from BonChooseVariable::chooseVariable() in order to test product thing
Reimplemented from Bonmin::BonChooseVariable.
Definition at line 85 of file CouenneChooseStrong.cpp.
References Bonmin::BonChooseVariable::bb_log_level_, Bonmin::BonChooseVariable::BRANCH_VAR, Bonmin::BonChooseVariable::CHOSEN_VAR, doStrongBranching(), estimateProduct_, estProdEps, Bonmin::BonChooseVariable::isRootNode(), Bonmin::BonChooseVariable::maxminCrit(), Bonmin::BonChooseVariable::message(), Bonmin::BonChooseVariable::minNumberStrongBranch_, Bonmin::BonChooseVariable::number_not_trusted_, Bonmin::BonChooseVariable::numberStrongRoot_, Bonmin::BonChooseVariable::only_pseudo_when_trusted_, problem_, Bonmin::BonChooseVariable::pseudoCosts_, Bonmin::BonChooseVariable::results_, Bonmin::BonChooseVariable::SB_HEADER, and Bonmin::BonChooseVariable::SB_RES.
void CouenneChooseStrong::registerOptions | ( | Ipopt::SmartPtr< Bonmin::RegisteredOptions > | roptions | ) | [static] |
Add list of options to be read from file.
Definition at line 341 of file CouenneChooseStrong.cpp.
Referenced by CouenneCutGenerator::registerOptions().
int CouenneChooseStrong::simulateBranch | ( | OsiObject * | Object, | |
OsiBranchingInformation * | info, | |||
OsiBranchingObject * | branch, | |||
OsiSolverInterface * | solver, | |||
Bonmin::HotInfo * | result, | |||
int | direction | |||
) | [protected] |
does one side of the branching
Definition at line 285 of file doStrongBranching.cpp.
References BranchingFBBT(), clone(), COUENNE_EPS, COUENNE_INFINITY, distance(), problem_, pseudoUpdateLP_, and Bonmin::BonChooseVariable::updateInformation().
Referenced by doStrongBranching().
CouenneProblem* CouenneChooseStrong::problem_ [protected] |
Pointer to the associated MINLP problem.
Definition at line 89 of file CouenneChooseStrong.hpp.
Referenced by chooseVariable(), doStrongBranching(), feasibleSolution(), operator=(), setupList(), and simulateBranch().
bool CouenneChooseStrong::pseudoUpdateLP_ [protected] |
should we update the pseudocost multiplier with the distance between the LP point and the solution of the resulting branches' LPs? If so, this only happens in strong branching
Definition at line 94 of file CouenneChooseStrong.hpp.
Referenced by CouenneChooseStrong(), doStrongBranching(), operator=(), and simulateBranch().
bool CouenneChooseStrong::estimateProduct_ [protected] |
Normally, a convex combination of the min/max lower bounds' estimates is taken to select a branching variable, as in the original definition of strong branching.
If this option is set to true, their product is taken instead:
(1e-6+min) * max
where the 1e-6 is used to ensure that even those with one subproblem with no improvement are compared.
Definition at line 105 of file CouenneChooseStrong.hpp.
Referenced by chooseVariable(), CouenneChooseStrong(), and operator=().
JnlstPtr CouenneChooseStrong::jnlst_ [protected] |
pointer to journalist for detailed information
Reimplemented from Bonmin::BonChooseVariable.
Definition at line 108 of file CouenneChooseStrong.hpp.
Referenced by doStrongBranching(), operator=(), setupList(), and ~CouenneChooseStrong().
double CouenneChooseStrong::branchtime_ [protected] |
total time spent in strong branching
Definition at line 111 of file CouenneChooseStrong.hpp.
Referenced by doStrongBranching(), operator=(), and ~CouenneChooseStrong().