[BCP] tail-off and early branching

Mustafa Kilinc mrk46 at pitt.edu
Fri Sep 30 12:29:52 EDT 2011


Hello,
I am trying to solve a very hard problem with column generation. I am 
using Bcp-1.3.0
Because of tail-off, there are still too many variables with negative 
reduced cost. I can not prove that LP relaxation of reduced master is 
optimal, but I can bound it by using dual information.

I want to branch before pricing out all variables. I hope that I would 
get good lower bounds after branching. To do this,  I set 
BCP_LpValueIsTrueLowerBound to zero.

Since I happen to have a very good upped bound (equal to last root LP 
relaxation), child nodes are pruned at the tree manager. I tried to 
understand why this is happening. I realized that
child nodes true lower bound values are set to LP relaxation value.  
Below is the relevant part of the output.

/LP: Starting strong branching:

LP: Default prepare_for_optimization() executed.
CPX0000
CPX0000  Iteration log . . .
CPX0000  Iteration:     1   Dual objective     =         -4472.140155
CPX0000  Iteration:    77   Dual objective     =         -4453.177474
CPX0000  Iteration:   148   Dual objective     =         -4436.405125
CPX0000  Iteration:   221   Dual objective     =         -4429.682745
LP: Default test_feasibility() executed.
LP: Default test_full() executed.
LP: Default prepare_for_optimization() executed.
LP: Default test_feasibility() executed.
LP: Default test_full() executed.
LP: Default pack_feasible_solution() executed.
  TM: Default unpack_feasible_solution() executed.
TM: Solution found at 84.289 sec.
TM 34.301: Sol from proc: 1  val: -4472.268574 (prev best: 
-4472.268574)  tree size/procd: 1/0  cand list ins/size: 1/0
LP:   Presolving:  
(27,0.0000,0.0000;28,0.0000,0.0000;................../  ) 
[-4429.3249,2,251] [-4472.2686,2,0]
LP: Default compare_presolved_branching_objects() executed.
LP: Default set_actions_for_children() executed.

LP:   SB selected candidate 0 out of 1.
LP: Default prepare_for_optimization() executed.
CPX0000  Parallel mode: deterministic, using up to 2 threads for 
concurrent optimization.
LP:   Returned children to TM. Waiting for new node.
TM: Pruning NODE 1 LEVEL 1 instead of sending it.
TM: Pruning NODE 2 LEVEL 1 instead of sending it.
TM: final statistics:
TM: Running time: 34.321/


The relevant parts of the BCP code are given below. At line 172 of 
../../../Bcp/src/TM/BCP_tm_functions.cpp, next_node->getTrueLB() is 
called to get true lower bound and this is an inline function at line 96 
of Bcp/Bcp-1.3.0/CoinUtils/src/CoinSearchTree.hpp.

/
at ../../../Bcp/src/TM/BCP_tm_functions.cpp:172

        if (next_node->getTrueLB() > p.ub() - p.granularity())
             process_this = false;
         if (next_node->getTrueLB() >
             p.ub() - p.param(BCP_tm_par::TerminationGap_Absolute))
             process_this = false;
         if (next_node->getTrueLB() >
             p.ub() * (1 - p.param(BCP_tm_par::TerminationGap_Relative)))
             process_this = false;

at /home/mrk46/Bcp/Bcp-1.3.0/CoinUtils/src/CoinSearchTree.hpp:96
96        inline double       getTrueLB()        const { return 
true_lower_bound_; }
/

Is there a way that I can avoid pruning of child nodes and accomplish 
what I want in Bcp?

Thanks,
Mustafa Kilinc


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/bcp/attachments/20110930/b58ab731/attachment.html>


More information about the BCP mailing list