[BCP] tail-off and early branching
Mustafa Kilinc
mrk46 at pitt.edu
Mon Oct 3 11:18:36 EDT 2011
Hello Laci,
I am already overriding BCP_lp_user::compute_lower_bound() method. I
think the issue is with the presolve in strong branching. I solved my
problem by disabling strong branching.
Mustafa
On 09/30/2011 10:34 PM, Laszlo Ladanyi wrote:
> I suppose you did override the BCP_lp_user::generate_vars_in_lp()
> method, but you also need to override the
> BCP_lp_user::compute_lower_bound() method. There you can return a true
> lower bound you compute with the dual information.
>
> --Laci
>
> On 09/30/2011 12:29 PM, Mustafa Kilinc wrote:
>
>> 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
>>
>>
>>
>>
>>
>> _______________________________________________
>> BCP mailing list
>> BCP at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/bcp
>>
>
More information about the BCP
mailing list