00001 // Copyright (C) 2000, International Business Machines 00002 // Corporation and others. All Rights Reserved. 00003 #include "BCP_error.hpp" 00004 #include "BCP_branch.hpp" 00005 #include "BCP_buffer.hpp" 00006 #include "OsiSolverInterface.hpp" 00007 #include "BCP_lp_branch.hpp" 00008 00009 BCP_internal_brobj::BCP_internal_brobj(BCP_lp_branching_object& candidate) : 00010 _child_num(candidate.child_num), 00011 _var_positions(), _cut_positions(), _var_bounds(), _cut_bounds() 00012 { 00013 if (candidate.forced_var_pos) { 00014 _var_positions = *candidate.forced_var_pos; 00015 _var_bounds = *candidate.forced_var_bd; 00016 } 00017 if (candidate.forced_cut_pos) { 00018 _cut_positions = *candidate.forced_cut_pos; 00019 _cut_bounds = *candidate.forced_cut_bd; 00020 } 00021 } 00022 00023 00024 void 00025 BCP_internal_brobj::apply_child_bounds(OsiSolverInterface* lp, 00026 int child_ind) const 00027 { 00028 if (_var_positions.size() > 0) { 00029 lp->setColSetBounds(_var_positions.begin(), _var_positions.end(), 00030 var_bounds_child(child_ind)); 00031 } 00032 if (_cut_positions.size() > 0) { 00033 lp->setRowSetBounds(_cut_positions.begin(), _cut_positions.end(), 00034 cut_bounds_child(child_ind)); 00035 } 00036 } 00037 00038 void BCP_internal_brobj::pack(BCP_buffer& buf) const { 00039 buf.pack(_child_num) 00040 .pack(_var_positions).pack(_var_bounds) 00041 .pack(_cut_positions).pack(_cut_bounds); 00042 } 00043 00044 void BCP_internal_brobj::unpack(BCP_buffer& buf) { 00045 buf.unpack(_child_num) 00046 .unpack(_var_positions).unpack(_var_bounds) 00047 .unpack(_cut_positions).unpack(_cut_bounds); 00048 }