#include <cstdio>
#include <numeric>
#include <utility>
#include "CoinWarmStart.hpp"
#include "CoinTime.hpp"
#include "BCP_math.hpp"
#include "BCP_enum.hpp"
#include "BCP_matrix.hpp"
#include "BCP_warmstart.hpp"
#include "BCP_lp_result.hpp"
#include "BCP_lp_node.hpp"
#include "BCP_lp_user.hpp"
#include "BCP_lp_functions.hpp"
#include "BCP_lp_pool.hpp"
#include "BCP_lp_branch.hpp"
#include "BCP_lp.hpp"
Include dependency graph for BCP_lp_branching.cpp:
Go to the source code of this file.
Functions | |
static std::pair< int, int > | BCP_add_branching_objects (BCP_lp_prob &p, BCP_vec< BCP_lp_branching_object * > &candidates) |
static void | BCP_mark_result_of_strong_branching (BCP_lp_prob &p, const BCP_lp_branching_object *can, const int added_col_num, const int added_row_num) |
static BCP_branching_decision | BCP_lp_select_branching_object (BCP_lp_prob &p, BCP_presolved_lp_brobj *&best_presolved) |
static void | BCP_lp_make_parent_from_node (BCP_lp_prob &p) |
static void | BCP_print_brobj_stat (BCP_lp_prob &p, const int orig_varnum, const int candidate_num, const int selected, const BCP_presolved_lp_brobj *best_presolved) |
static int | BCP_lp_perform_strong_branching (BCP_lp_prob &p, BCP_vec< BCP_lp_branching_object * > &candidates, BCP_presolved_lp_brobj *&best_presolved) |
BCP_branching_result | BCP_lp_branch (BCP_lp_prob &p) |
static std::pair< int, int > BCP_add_branching_objects | ( | BCP_lp_prob & | p, | |
BCP_vec< BCP_lp_branching_object * > & | candidates | |||
) | [inline, static] |
Definition at line 85 of file BCP_lp_branching.cpp.
References BCP_fatal_error::abort_on_error, BCP_cut_set::append(), BCP_var_set::append(), BCP_vec< T >::append(), BCP_lp_add_cols_to_lp(), BCP_lp_add_rows_to_lp(), BCP_lp_next_cut_index(), BCP_lp_next_var_index(), BCP_Object_Branching, BCP_vec< T >::begin(), BCP_lp_node::cuts, BCP_lp_branching_object::cuts_to_add, BCP_lp_user::cuts_to_rows(), BCP_vec< T >::end(), BCP_lp_branching_object::init_pos_for_added(), BCP_vec< T >::insert(), BCP_lp_node::lb_at_cutgen, lp, BCP_lp_prob::lp_result, BCP_lp_prob::lp_solver, BCP_lp_prob::node, BCP_lp_result::objval(), purge_ptr_vector(), BCP_vec< T >::reserve(), BCP_vec< T >::size(), BCP_lp_prob::user, BCP_lp_node::vars, BCP_lp_branching_object::vars_to_add, and BCP_lp_user::vars_to_cols().
Referenced by BCP_lp_perform_strong_branching(), and BCP_lp_select_branching_object().
static void BCP_mark_result_of_strong_branching | ( | BCP_lp_prob & | p, | |
const BCP_lp_branching_object * | can, | |||
const int | added_col_num, | |||
const int | added_row_num | |||
) | [inline, static] |
Definition at line 189 of file BCP_lp_branching.cpp.
References BCP_vec< T >::begin(), BCP_vec< T >::end(), BCP_lp_branching_object::forced_var_pos, BCP_lp_branching_object::implied_var_pos, BCP_lp_prob::node, and BCP_lp_node::vars.
Referenced by BCP_lp_perform_strong_branching().
static BCP_branching_decision BCP_lp_select_branching_object | ( | BCP_lp_prob & | p, | |
BCP_presolved_lp_brobj *& | best_presolved | |||
) | [inline, static] |
Definition at line 414 of file BCP_lp_branching.cpp.
References BCP_presolved_lp_brobj::action(), BCP_Abandoned, BCP_add_branching_objects(), BCP_DoBranch, BCP_DoNotBranch, BCP_DoNotBranch_Fathomed, BCP_DoNotDive, BCP_KeepChild, BCP_lp_perform_strong_branching(), BCP_print_brobj_stat(), BCP_ReturnChild, BCP_vec< T >::begin(), c, BCP_presolved_lp_brobj::candidate(), BCP_lp_branching_object::child_num, BCP_lp_node::cuts, BCP_lp_node::dive, BCP_vec< T >::end(), BCP_vec< T >::erase(), BCP_lp_result::get_results(), BCP_presolved_lp_brobj::initialize_lower_bound(), BCP_lp_result::lhs(), BCP_lp_prob::local_cut_pool, BCP_lp_prob::local_var_pool, BCP_lp_prob::lp_result, BCP_lp_prob::lp_solver, BCP_lp_par::LpVerb_StrongBranchResult, BCP_lp_par::MaxPresolveIter, BCP_lp_user::modify_lp_parameters(), BCP_lp_prob::node, BCP_lp_result::objval(), BCP_lp_prob::param(), BCP_lp_result::primalTolerance(), BCP_lp_user::print(), BCP_lp_node::quality, BCP_lp_user::select_branching_candidates(), BCP_lp_user::set_actions_for_children(), BCP_presolved_lp_brobj::set_objective_values(), BCP_lp_user::set_user_data_for_children(), BCP_vec< T >::size(), BCP_lp_prob::stat, BCP_lp_result::termcode(), BCP_lp_statistics::time_branching, BCP_lp_node::true_lower_bound, BCP_lp_prob::user, BCP_lp_node::vars, BCP_lp_result::x(), and x.
Referenced by BCP_lp_branch().
static void BCP_lp_make_parent_from_node | ( | BCP_lp_prob & | p | ) | [inline, static] |
Definition at line 553 of file BCP_lp_branching.cpp.
References BCP_obj_set_change::_change, BCP_obj_set_change::_new_objs, BCP_Storage_NoData, BCP_Storage_WrtParent, BCP_vec< T >::clear(), BCP_lp_prob::core, BCP_node_storage_in_tm::core_change, BCP_node_storage_in_tm::cut_change, BCP_lp_parent::cut_set, BCP_problem_core::cutnum(), BCP_lp_node::cuts, BCP_lp_node::index, BCP_lp_parent::index, BCP_lp_prob::node, BCP_lp_prob::parent, BCP_vec< T >::reserve(), BCP_vec< T >::size(), BCP_lp_node::tm_storage, BCP_vec< T >::unchecked_push_back(), BCP_lp_node::user_data, BCP_node_storage_in_tm::var_change, BCP_lp_parent::var_set, BCP_problem_core::varnum(), BCP_lp_node::vars, BCP_node_storage_in_tm::warmstart, BCP_lp_node::warmstart, and BCP_lp_parent::warmstart.
Referenced by BCP_lp_branch().
static void BCP_print_brobj_stat | ( | BCP_lp_prob & | p, | |
const int | orig_varnum, | |||
const int | candidate_num, | |||
const int | selected, | |||
const BCP_presolved_lp_brobj * | best_presolved | |||
) | [inline, static] |
Definition at line 42 of file BCP_lp_branching.cpp.
References BCP_presolved_lp_brobj::action(), BCP_DBL_MAX, BCP_FathomChild, BCP_KeepChild, BCP_ReturnChild, BCP_presolved_lp_brobj::candidate(), BCP_lp_branching_object::child_num, BCP_lp_prob::lp_result, BCP_lp_prob::lp_solver, BCP_presolved_lp_brobj::lpres(), BCP_lp_par::LpVerb_ChildrenInfo, BCP_lp_par::LpVerb_StrongBranchPositions, BCP_lp_par::LpVerb_StrongBranchResult, BCP_lp_result::objval(), BCP_lp_prob::param(), BCP_lp_user::print(), BCP_lp_branching_object::print_branching_info(), BCP_lp_prob::user, and BCP_lp_result::x().
Referenced by BCP_lp_select_branching_object().
static int BCP_lp_perform_strong_branching | ( | BCP_lp_prob & | p, | |
BCP_vec< BCP_lp_branching_object * > & | candidates, | |||
BCP_presolved_lp_brobj *& | best_presolved | |||
) | [inline, static] |
Definition at line 247 of file BCP_lp_branching.cpp.
References BCP_lp_branching_object::apply_child_bd(), BCP_add_branching_objects(), BCP_DBL_MAX, BCP_lp_delete_cols_and_rows(), BCP_lp_test_feasibility(), BCP_mark_result_of_strong_branching(), BCP_NewPresolvedIsBetter, BCP_NewPresolvedIsBetter_BranchOnIt, BCP_OldPresolvedIsBetter, BCP_vec< T >::begin(), BCP_presolved_lp_brobj::candidate(), BCP_lp_branching_object::child_num, BCP_lp_user::compare_branching_candidates(), BCP_lp_node::cuts, BCP_lp_branching_object::cuts_affected(), BCP_vec< T >::end(), BCP_lp_user::generate_cuts_in_lp(), BCP_lp_user::getOsiBabSolver(), BCP_lp_node::index, BCP_lp_node::iteration_count, BCP_lp_node::level, lp, BCP_lp_prob::lp_result, BCP_lp_prob::lp_solver, BCP_lp_par::LpVerb_PresolvePositions, BCP_lp_par::LpVerb_PresolveResult, BCP_lp_par::LpVerb_StrongBranchResult, BCP_lp_par::MaxPresolveIter, BCP_lp_user::modify_lp_parameters(), BCP_lp_prob::node, BCP_lp_prob::param(), BCP_lp_user::print(), BCP_lp_branching_object::print_branching_info(), purge_ptr_vector(), BCP_vec< T >::size(), BCP_lp_prob::user, BCP_lp_node::vars, BCP_lp_branching_object::vars_affected(), ws, and BCP_lp_result::x().
Referenced by BCP_lp_select_branching_object().
BCP_branching_result BCP_lp_branch | ( | BCP_lp_prob & | p | ) |
Definition at line 618 of file BCP_lp_branching.cpp.
References BCP_lp_branching_object::apply_child_bd(), BCP_BranchingContinueThisNode, BCP_BranchingDivedIntoNewNode, BCP_BranchingFathomedThisNode, BCP_DoBranch, BCP_DoNotBranch, BCP_DoNotBranch_Fathomed, BCP_lp_clean_up_node(), BCP_lp_make_parent_from_node(), BCP_lp_perform_fathom(), BCP_lp_select_branching_object(), BCP_lp_send_cuts_to_cp(), BCP_lp_send_node_description(), BCP_Msg_NodeDescription_Discarded, BCP_Msg_NoMessage, BCP_presolved_lp_brobj::candidate(), BCP_lp_par::CutEffectiveCountBeforePool, BCP_lp_node::cuts, BCP_lp_branching_object::cuts_affected(), BCP_lp_branching_object::forced_cut_bd_child(), BCP_lp_branching_object::forced_cut_pos, BCP_lp_branching_object::forced_var_bd_child(), BCP_lp_branching_object::forced_var_pos, BCP_lp_branching_object::implied_cut_bd_child(), BCP_lp_branching_object::implied_cut_pos, BCP_lp_branching_object::implied_var_bd_child(), BCP_lp_branching_object::implied_var_pos, BCP_presolved_lp_brobj::is_pruned(), BCP_lp_prob::lp_solver, BCP_lp_par::LpVerb_FathomInfo, BCP_lp_prob::node, BCP_lp_prob::param(), BCP_lp_user::print(), BCP_cut_set::set_lb_ub(), BCP_var_set::set_lb_ub(), BCP_lp_prob::user, BCP_presolved_lp_brobj::user_data(), BCP_lp_node::user_data, BCP_lp_node::vars, and BCP_lp_branching_object::vars_affected().
Referenced by BCP_lp_main_loop().