[Coin-discuss] some information about Cbc

John J Forrest jjforre at us.ibm.com
Wed Aug 9 11:14:04 EDT 2006


Benoît,

You may need some of the settings I mentioned in qmip2.cpp - see points a)
b) c) d) especially d) as the final recompute of solution may be bad.  If
you send me the output I can look at it to see if anything is obvious.

John Forrest


                                                                           
             Benoît MERLET                                                 
             <benoit.merlet at or                                             
             ange-ft.com>                                               To 
             Sent by:                  Discussions about open source       
             coin-discuss-boun         software for Operations Research    
             ces at list.coin-or.         <coin-discuss at list.coin-or.org>     
             org                                                        cc 
                                                                           
                                                                   Subject 
             08/08/06 12:06 PM         Re: [Coin-discuss] some information 
                                       about Cbc                           
                                                                           
             Please respond to                                             
             Discussions about                                             
                open source                                                
               software for                                                
                Operations                                                 
                 Research                                                  
             <coin-discuss at lis                                             
              t.coin-or.org>                                               
                                                                           
                                                                           




John,

Your questions make me think : I profiled my code, and I found that my
"cutGenerationProcess" is the method where time is spent. So, I tried to
avoid running it when the solution isn't integral.

In the method generateCuts() of my generator :

         if( hasFractionnalComponent(si.getColSolution(), nVars) )
         {
                 cerr << "  fractionnal component, exiting" << endl;
                 return;
         }

Cuts are added only when the solution is integral, but, as I said in my
previous mail, this solution can be infeasible for the MIP problem,
because cuts we added are inequalities (here, metric inequalities)
discribing the feasible solutions of the MIP problem (a network design
problem).

But, sadly, it doesn't work well. Indeed, Cbc consider integral
solutions as good ones, but after the branch-and-bound, if I try to
generate cuts :

             model.branchAndBound();
         cout << "Verifying if solution is feasible ... ";
         MyGenerator generator;
         OsiCuts cutset;
         generator.generateCuts(*model.solver(), cutset);
         cout << ((cutset.sizeCuts() == 0)?"ok.":"nok") << endl;

"nok" is printed.

I wonder if cuts are added *before* considering the current solution as
the best solution.

Could you confirm ? Have you another explanation ?

Benoît.


> Hello,
>
>> Your approach adds all possible cuts before going on to allow Cbc to
>> branch.  Are you sure you need to do that?  The main thing is to add
cuts
>> while you have what looks like an integral solution but which is invalid
>> because of possible cuts.  You also want to add cuts to improve bound
but
>> it is the first that is important.  You can force Cbc to keep going
round
>> adding cuts until you tell it to stop and there are various other
>> switches
>> you can set to avoid fake solutions e.g. in strong branching.  You can
>> find
>> an example in examples/qmip2.cpp.  It is still a bit experimental.
>
> I think I need to explain the history of the method I implemented.
>
> In fact, another exact method exists to solve the same problem : a
> Benders-like constraint generation. The MIP is solved, and with its
> solution, a violated constraint is generated and added to the MIP. This
> sequence is iterated until no more violated constraints can be found. It
> is important to note that the generated constraints are feasability
> constraints, so when one can't generate one, the current solution is the
> solution.
>
> But with this method, at each iteration, a MIP is solved, which takes
> time. We decided then to integrate directly the constraint generation
> process during the search progress of the branch-and-bound : here comes
> our branch-and-cut. And you can see we have to add all possible cuts
> before branching because at each node we want to evaluate a feasible
> solution for our problem (even if this solution is not integral).
>
>> It might also be useful to use -pg to profile your code to see where
time
>> is being spent.
>
> Yes, the executable is compiled and linked with this option. I will take
> time to see what's happenning.
>
> Thanks a lot for your answers,
> Benoît.


_______________________________________________
Coin-discuss mailing list
Coin-discuss at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/coin-discuss






More information about the Coin-discuss mailing list