#include <BM.hpp>
Collaboration diagram for BM_lp:
Public Member Functions | |
BM_lp () | |
virtual | ~BM_lp () |
int & | numNlpFailed () |
virtual void | unpack_module_data (BCP_buffer &buf) |
virtual void | process_message (BCP_buffer &buf) |
Process a message that has been sent by another process' user part to this process' user part. | |
virtual OsiSolverInterface * | initialize_solver_interface () |
virtual void | load_problem (OsiSolverInterface &osi, BCP_problem_core *core, BCP_var_set &vars, BCP_cut_set &cuts) |
virtual void | modify_lp_parameters (OsiSolverInterface *lp, bool in_strong_branching) |
virtual BCP_solution * | test_feasibility (const BCP_lp_result &lp_result, const BCP_vec< BCP_var * > &vars, const BCP_vec< BCP_cut * > &cuts) |
BCP_solution * | test_feasibility_BB (const BCP_lp_result &lp_result, const BCP_vec< BCP_var * > &vars) |
BCP_solution * | test_feasibility_hybrid (const BCP_lp_result &lp_result, const BCP_vec< BCP_var * > &vars, const BCP_vec< BCP_cut * > &cuts) |
virtual void | generate_cuts_in_lp (const BCP_lp_result &lpres, const BCP_vec< BCP_var * > &vars, const BCP_vec< BCP_cut * > &cuts, BCP_vec< BCP_cut * > &new_cuts, BCP_vec< BCP_row * > &new_rows) |
virtual void | cuts_to_rows (const BCP_vec< BCP_var * > &vars, BCP_vec< BCP_cut * > &cuts, BCP_vec< BCP_row * > &rows, const BCP_lp_result &lpres, BCP_object_origin origin, bool allow_multiple) |
virtual double | compute_lower_bound (const double old_lower_bound, const BCP_lp_result &lpres, const BCP_vec< BCP_var * > &vars, const BCP_vec< BCP_cut * > &cuts) |
virtual void | initialize_new_search_tree_node (const BCP_vec< BCP_var * > &vars, const BCP_vec< BCP_cut * > &cuts, const BCP_vec< BCP_obj_status > &vs, const BCP_vec< BCP_obj_status > &cs, BCP_vec< int > &var_changed_pos, BCP_vec< double > &var_new_bd, BCP_vec< int > &cut_changed_pos, BCP_vec< double > &cut_new_bd) |
virtual BCP_branching_decision | select_branching_candidates (const BCP_lp_result &lpres, const BCP_vec< BCP_var * > &vars, const BCP_vec< BCP_cut * > &cuts, const BCP_lp_var_pool &local_var_pool, const BCP_lp_cut_pool &local_cut_pool, BCP_vec< BCP_lp_branching_object * > &cans, bool force_branch=false) |
BCP_branching_decision | bbBranch (OsiBranchingInformation &brInfo, BCP_vec< BCP_lp_branching_object * > &cands) |
BCP_branching_decision | hybridBranch () |
void | send_pseudo_cost_update (OsiBranchingInformation &branchInfo) |
Methods invoked from bbBranch(). | |
void | unpack_pseudo_costs (BCP_buffer &buf) |
int | sort_objects (OsiBranchingInformation &branchInfo, Bonmin::BonChooseVariable *choose, int &branchNum) |
void | clear_SB_results () |
void | collect_branch_data (OsiBranchingInformation &branchInfo, OsiSolverInterface *solver, const int branchNum, BM_BranchData *branchData) |
void | do_distributed_SB (OsiBranchingInformation &branchInfo, OsiSolverInterface *solver, const CoinWarmStart *cws, const int branchNum, const int *pids, const int pidNum) |
bool | isBranchFathomable (int status, double obj) |
int | process_SB_results (OsiBranchingInformation &branchInfo, OsiSolverInterface *solver, Bonmin::BonChooseVariable *choose, OsiBranchingObject *&branchObject) |
int | try_to_branch (OsiBranchingInformation &branchInfo, OsiSolverInterface *solver, Bonmin::BonChooseVariable *choose, OsiBranchingObject *&branchObject, bool allowVarFix) |
virtual void | set_user_data_for_children (BCP_presolved_lp_brobj *best, const int selected) |
Private Attributes | |
int | in_strong |
BCP_string | ipopt_file_content |
BCP_string | nl_file_content |
BCP_parameter_set< BM_par > | par |
BCP_buffer | bm_buf |
Bonmin::BonminAmplSetup | bonmin_ |
This contains the setup for running Bonmin in particular nlp solver, continuous solver, cut generators,. | |
double | integerTolerance_ |
int | numNlpFailed_ |
A counter for how many times in a row did the NLP code fail. | |
OsiCuts | cuts_ |
int * | objInd_ |
These are the indices of the integral (i.e., things that can be branched on) objects in the solver, sorted based on the priority of the corresponding objects. | |
int | objNum_ |
int * | infInd_ |
Every time when branching decisions are to be made, we create 6 arrays, 3 for those objects that are infeasible and 3 for those that are feasible. | |
double * | infUseful_ |
int | infNum_ |
int * | feasInd_ |
double * | feasUseful_ |
int | feasNum_ |
BM_SB_result * | sbResult_ |
This is where we keep the results in case of distributed strong branching. | |
BM_SB_result * | bestSbResult_ |
A pointer to the entry that got selected. | |
double | node_start_time |
The time when we started to process the node. | |
BM_stats | bm_stats |
Class for collecting statistics. |
Definition at line 273 of file BM.hpp.
BM_lp::~BM_lp | ( | ) | [virtual] |
Definition at line 49 of file BM_lp.cpp.
References feasInd_, feasUseful_, infInd_, infUseful_, objInd_, and sbResult_.
void BM_lp::unpack_module_data | ( | BCP_buffer & | buf | ) | [virtual] |
Definition at line 35 of file BM_pack.cpp.
References bonmin_, e, feasInd_, feasUseful_, Bonmin::BonminSetup::getAlgorithm(), Bonmin::OsiTMINLPInterface::getColLower(), Bonmin::OsiTMINLPInterface::getColUpper(), Bonmin::BabSetupBase::getDoubleParameter(), Bonmin::OsiTMINLPInterface::getNumCols(), Bonmin::OsiTMINLPInterface::getPriorities(), Bonmin::TMINLP::SosInfo::indices, infInd_, infUseful_, Bonmin::BonminAmplSetup::initialize(), integerTolerance_, ipopt_file_content, Bonmin::OsiTMINLPInterface::isInteger(), Bonmin::OsiTMINLPInterface::model(), nl_file_content, Bonmin::BabSetupBase::nonlinearSolver(), Bonmin::TMINLP::SosInfo::num, objInd_, objNum_, Bonmin::BabSetupBase::options(), par, Bonmin::TMINLP::SosInfo::priorities, sbResult_, Bonmin::TMINLP::SosInfo::starts, Bonmin::TMINLP::SosInfo::types, and Bonmin::TMINLP::SosInfo::weights.
void BM_lp::process_message | ( | BCP_buffer & | buf | ) | [virtual] |
Process a message that has been sent by another process' user part to this process' user part.
Definition at line 1008 of file BM_lp_branch.cpp.
References bm_buf, BM_solve_branches(), bm_stats, BM_StrongBranchRequest, BM_StrongBranchResult, bonmin_, BM_BranchData::changeType, Bonmin::OsiTMINLPInterface::getNumCols(), BM_stats::incNumberSbSolves(), Bonmin::BabSetupBase::nonlinearSolver(), Bonmin::OsiTMINLPInterface::setColLower(), Bonmin::OsiTMINLPInterface::setColUpper(), and ws.
OsiSolverInterface * BM_lp::initialize_solver_interface | ( | ) | [virtual] |
Definition at line 62 of file BM_lp.cpp.
References bonmin_, Bonmin::BonminSetup::getAlgorithm(), Bonmin::BabSetupBase::nonlinearSolver(), and prefix.
void BM_lp::load_problem | ( | OsiSolverInterface & | osi, | |
BCP_problem_core * | core, | |||
BCP_var_set & | vars, | |||
BCP_cut_set & | cuts | |||
) | [virtual] |
Definition at line 136 of file BM_lp.cpp.
References bonmin_, and Bonmin::BonminSetup::getAlgorithm().
void BM_lp::modify_lp_parameters | ( | OsiSolverInterface * | lp, | |
bool | in_strong_branching | |||
) | [virtual] |
BCP_solution * BM_lp::test_feasibility | ( | const BCP_lp_result & | lp_result, | |
const BCP_vec< BCP_var * > & | vars, | |||
const BCP_vec< BCP_cut * > & | cuts | |||
) | [virtual] |
Definition at line 165 of file BM_lp.cpp.
References bonmin_, Bonmin::BonminSetup::getAlgorithm(), test_feasibility_BB(), and test_feasibility_hybrid().
BCP_solution * BM_lp::test_feasibility_BB | ( | const BCP_lp_result & | lp_result, | |
const BCP_vec< BCP_var * > & | vars | |||
) |
Definition at line 181 of file BM_lp.cpp.
References integerTolerance_.
Referenced by test_feasibility().
BCP_solution * BM_lp::test_feasibility_hybrid | ( | const BCP_lp_result & | lp_result, | |
const BCP_vec< BCP_var * > & | vars, | |||
const BCP_vec< BCP_cut * > & | cuts | |||
) |
Definition at line 201 of file BM_lp.cpp.
References bonmin_, Bonmin::BabSetupBase::cutGenerators(), cuts_, integerTolerance_, and Bonmin::BabSetupBase::nonlinearSolver().
Referenced by test_feasibility().
void BM_lp::generate_cuts_in_lp | ( | const BCP_lp_result & | lpres, | |
const BCP_vec< BCP_var * > & | vars, | |||
const BCP_vec< BCP_cut * > & | cuts, | |||
BCP_vec< BCP_cut * > & | new_cuts, | |||
BCP_vec< BCP_row * > & | new_rows | |||
) | [virtual] |
Definition at line 248 of file BM_lp.cpp.
References bonmin_, Bonmin::BabSetupBase::cutGenerators(), cuts_, Bonmin::BonminSetup::getAlgorithm(), and info.
void BM_lp::cuts_to_rows | ( | const BCP_vec< BCP_var * > & | vars, | |
BCP_vec< BCP_cut * > & | cuts, | |||
BCP_vec< BCP_row * > & | rows, | |||
const BCP_lp_result & | lpres, | |||
BCP_object_origin | origin, | |||
bool | allow_multiple | |||
) | [virtual] |
double BM_lp::compute_lower_bound | ( | const double | old_lower_bound, | |
const BCP_lp_result & | lpres, | |||
const BCP_vec< BCP_var * > & | vars, | |||
const BCP_vec< BCP_cut * > & | cuts | |||
) | [virtual] |
Definition at line 313 of file BM_lp.cpp.
References bonmin_, and Bonmin::BonminSetup::getAlgorithm().
void BM_lp::initialize_new_search_tree_node | ( | const BCP_vec< BCP_var * > & | vars, | |
const BCP_vec< BCP_cut * > & | cuts, | |||
const BCP_vec< BCP_obj_status > & | vs, | |||
const BCP_vec< BCP_obj_status > & | cs, | |||
BCP_vec< int > & | var_changed_pos, | |||
BCP_vec< double > & | var_new_bd, | |||
BCP_vec< int > & | cut_changed_pos, | |||
BCP_vec< double > & | cut_new_bd | |||
) | [virtual] |
Definition at line 89 of file BM_lp.cpp.
References bonmin_, Bonmin::BonminSetup::getAlgorithm(), in_strong, node_start_time, Bonmin::BabSetupBase::nonlinearSolver(), BM_node::numNlpFailed_, numNlpFailed_, Bonmin::OsiTMINLPInterface::setColLower(), and Bonmin::OsiTMINLPInterface::setColUpper().
BCP_branching_decision BM_lp::select_branching_candidates | ( | const BCP_lp_result & | lpres, | |
const BCP_vec< BCP_var * > & | vars, | |||
const BCP_vec< BCP_cut * > & | cuts, | |||
const BCP_lp_var_pool & | local_var_pool, | |||
const BCP_lp_cut_pool & | local_cut_pool, | |||
BCP_vec< BCP_lp_branching_object * > & | cans, | |||
bool | force_branch = false | |||
) | [virtual] |
Definition at line 31 of file BM_lp_branch.cpp.
References bbBranch(), bm_stats, bonmin_, Bonmin::OsiTMINLPInterface::forceBranchable(), Bonmin::BonminSetup::getAlgorithm(), hybridBranch(), ifprint, BM_stats::incNumberNodeSolves(), integerTolerance_, Bonmin::OsiTMINLPInterface::isIterationLimitReached(), numNlpFailed_, BM_par::NumNlpFailureMax, and par.
BCP_branching_decision BM_lp::bbBranch | ( | OsiBranchingInformation & | brInfo, | |
BCP_vec< BCP_lp_branching_object * > & | cands | |||
) |
Definition at line 824 of file BM_lp_branch.cpp.
References bestSbResult_, bonmin_, Bonmin::BabSetupBase::branchingMethod(), Bonmin::OsiTMINLPInterface::getColLower(), Bonmin::OsiTMINLPInterface::getColUpper(), Bonmin::OsiTMINLPInterface::getDblParam(), Bonmin::OsiTMINLPInterface::getNumCols(), ifprint2, integerTolerance_, BM_SB_result::objval, Bonmin::BabSetupBase::options(), par, BM_par::PrintBranchingInfo, BM_SB_result::status, and try_to_branch().
Referenced by select_branching_candidates().
BCP_branching_decision BM_lp::hybridBranch | ( | ) |
void BM_lp::send_pseudo_cost_update | ( | OsiBranchingInformation & | branchInfo | ) |
Methods invoked from bbBranch().
Definition at line 123 of file BM_lp_branch.cpp.
References bm_buf, BM_PseudoCostUpdate, objNum_, and sbResult_.
Referenced by try_to_branch().
void BM_lp::unpack_pseudo_costs | ( | BCP_buffer & | buf | ) |
Definition at line 102 of file BM_lp_branch.cpp.
References bonmin_, Bonmin::BabSetupBase::branchingMethod(), and Bonmin::BonChooseVariable::pseudoCosts().
int BM_lp::sort_objects | ( | OsiBranchingInformation & | branchInfo, | |
Bonmin::BonChooseVariable * | choose, | |||
int & | branchNum | |||
) |
Definition at line 171 of file BM_lp_branch.cpp.
References Bonmin::BonChooseVariable::computeMultipliers(), Bonmin::BonChooseVariable::computeUsefulness(), BM_par::DecreasingSortInSetupList, BM_par::DisregardPriorities, feasInd_, feasNum_, feasUseful_, infInd_, infNum_, infUseful_, Bonmin::BonChooseVariable::maxminCrit(), node_start_time, objInd_, objNum_, par, and BM_par::UsePseudoCosts.
Referenced by try_to_branch().
void BM_lp::clear_SB_results | ( | ) |
Definition at line 312 of file BM_lp_branch.cpp.
References bestSbResult_, objNum_, and sbResult_.
Referenced by try_to_branch().
void BM_lp::collect_branch_data | ( | OsiBranchingInformation & | branchInfo, | |
OsiSolverInterface * | solver, | |||
const int | branchNum, | |||
BM_BranchData * | branchData | |||
) |
Definition at line 323 of file BM_lp_branch.cpp.
References BM_BranchData::bd, BM_Var_DownBranch, BM_Var_UpBranch, BM_BranchData::changeType, BM_BranchData::colInd, feasInd_, feasNum_, infInd_, infNum_, BM_SB_result::objInd, BM_BranchData::objInd, sbResult_, BM_BranchData::solval, and BM_SB_result::varChange.
Referenced by do_distributed_SB().
void BM_lp::do_distributed_SB | ( | OsiBranchingInformation & | branchInfo, | |
OsiSolverInterface * | solver, | |||
const CoinWarmStart * | cws, | |||
const int | branchNum, | |||
const int * | pids, | |||
const int | pidNum | |||
) |
Definition at line 445 of file BM_lp_branch.cpp.
References bm_buf, BM_register_branch_results(), BM_solve_branches(), bm_stats, BM_StrongBranchRequest, BM_StrongBranchResult, collect_branch_data(), BM_stats::incNumberSbSolves(), s, sbResult_, BM_BranchData::status, and ws.
Referenced by try_to_branch().
bool BM_lp::isBranchFathomable | ( | int | status, | |
double | obj | |||
) |
Definition at line 537 of file BM_lp_branch.cpp.
int BM_lp::process_SB_results | ( | OsiBranchingInformation & | branchInfo, | |
OsiSolverInterface * | solver, | |||
Bonmin::BonChooseVariable * | choose, | |||
OsiBranchingObject *& | branchObject | |||
) |
Definition at line 546 of file BM_lp_branch.cpp.
References infInd_, infNum_, and sbResult_.
Referenced by try_to_branch().
int BM_lp::try_to_branch | ( | OsiBranchingInformation & | branchInfo, | |
OsiSolverInterface * | solver, | |||
Bonmin::BonChooseVariable * | choose, | |||
OsiBranchingObject *& | branchObject, | |||
bool | allowVarFix | |||
) |
Definition at line 746 of file BM_lp_branch.cpp.
References bm_buf, clear_SB_results(), do_distributed_SB(), Bonmin::IpoptWarmStart::empty(), par, process_SB_results(), BM_par::SBMaxLevel, BM_par::SBNumBranchesInRoot, BM_par::SBNumBranchesInTree, send_pseudo_cost_update(), and sort_objects().
Referenced by bbBranch().
void BM_lp::set_user_data_for_children | ( | BCP_presolved_lp_brobj * | best, | |
const int | selected | |||
) | [virtual] |
Definition at line 993 of file BM_lp_branch.cpp.
References numNlpFailed_, and BM_node::numNlpFailed_.
int BM_lp::in_strong [private] |
Definition at line 278 of file BM.hpp.
Referenced by initialize_new_search_tree_node(), and modify_lp_parameters().
BCP_string BM_lp::ipopt_file_content [private] |
BCP_string BM_lp::nl_file_content [private] |
BCP_parameter_set<BM_par> BM_lp::par [private] |
Definition at line 282 of file BM.hpp.
Referenced by bbBranch(), select_branching_candidates(), sort_objects(), try_to_branch(), and unpack_module_data().
BCP_buffer BM_lp::bm_buf [private] |
Definition at line 283 of file BM.hpp.
Referenced by do_distributed_SB(), process_message(), send_pseudo_cost_update(), and try_to_branch().
Bonmin::BonminAmplSetup BM_lp::bonmin_ [private] |
This contains the setup for running Bonmin in particular nlp solver, continuous solver, cut generators,.
..
Definition at line 287 of file BM.hpp.
Referenced by bbBranch(), compute_lower_bound(), generate_cuts_in_lp(), initialize_new_search_tree_node(), initialize_solver_interface(), load_problem(), process_message(), select_branching_candidates(), test_feasibility(), test_feasibility_hybrid(), unpack_module_data(), and unpack_pseudo_costs().
double BM_lp::integerTolerance_ [private] |
Definition at line 289 of file BM.hpp.
Referenced by bbBranch(), select_branching_candidates(), test_feasibility_BB(), test_feasibility_hybrid(), and unpack_module_data().
int BM_lp::numNlpFailed_ [private] |
A counter for how many times in a row did the NLP code fail.
When the NLP fails we branch; hopefully it'll be OK in the children. If it fails too many times in a row then we fathom the node: it's hopelessly difficult.
Definition at line 295 of file BM.hpp.
Referenced by initialize_new_search_tree_node(), select_branching_candidates(), and set_user_data_for_children().
OsiCuts BM_lp::cuts_ [private] |
Definition at line 297 of file BM.hpp.
Referenced by cuts_to_rows(), generate_cuts_in_lp(), and test_feasibility_hybrid().
int* BM_lp::objInd_ [private] |
These are the indices of the integral (i.e., things that can be branched on) objects in the solver, sorted based on the priority of the corresponding objects.
Definition at line 302 of file BM.hpp.
Referenced by sort_objects(), unpack_module_data(), and ~BM_lp().
int BM_lp::objNum_ [private] |
Definition at line 303 of file BM.hpp.
Referenced by clear_SB_results(), send_pseudo_cost_update(), sort_objects(), and unpack_module_data().
int* BM_lp::infInd_ [private] |
Every time when branching decisions are to be made, we create 6 arrays, 3 for those objects that are infeasible and 3 for those that are feasible.
infInd_ contains the indices of the objects (into the objects_ array of objects) that are not feasible, infUseful_ cointains their usefulness and infNum_ their number. They are ordered by their priority and within that by their usefulness (that depends on their pseudocosts, etc.). feasXXX_ contains the same for objects that are feasible, except that SOS objects are not listed there, nor variables that are fixed.
Definition at line 313 of file BM.hpp.
Referenced by collect_branch_data(), process_SB_results(), sort_objects(), unpack_module_data(), and ~BM_lp().
double* BM_lp::infUseful_ [private] |
Definition at line 314 of file BM.hpp.
Referenced by sort_objects(), unpack_module_data(), and ~BM_lp().
int BM_lp::infNum_ [private] |
Definition at line 315 of file BM.hpp.
Referenced by collect_branch_data(), process_SB_results(), and sort_objects().
int* BM_lp::feasInd_ [private] |
Definition at line 316 of file BM.hpp.
Referenced by collect_branch_data(), sort_objects(), unpack_module_data(), and ~BM_lp().
double* BM_lp::feasUseful_ [private] |
Definition at line 317 of file BM.hpp.
Referenced by sort_objects(), unpack_module_data(), and ~BM_lp().
int BM_lp::feasNum_ [private] |
BM_SB_result* BM_lp::sbResult_ [private] |
This is where we keep the results in case of distributed strong branching.
The length of the array is objNum_
Definition at line 322 of file BM.hpp.
Referenced by clear_SB_results(), collect_branch_data(), do_distributed_SB(), process_SB_results(), send_pseudo_cost_update(), unpack_module_data(), and ~BM_lp().
BM_SB_result* BM_lp::bestSbResult_ [private] |
A pointer to the entry that got selected.
Definition at line 324 of file BM.hpp.
Referenced by bbBranch(), and clear_SB_results().
double BM_lp::node_start_time [private] |
The time when we started to process the node.
Definition at line 327 of file BM.hpp.
Referenced by initialize_new_search_tree_node(), and sort_objects().
BM_stats BM_lp::bm_stats [private] |
Class for collecting statistics.
Definition at line 330 of file BM.hpp.
Referenced by do_distributed_SB(), process_message(), and select_branching_candidates().