wiki:FAQ

Version 1 (modified by jpfasano, 13 years ago) (diff)

initial draft

CBC FAQs

What is the CBC code?

It is a branch and cut code designed to work with any OSI capable solver and in particular Clp. It used to be called Sbb (Simple Branch and Bound) but due to people confusing it with GAMS Sbb solver it has been renamed to Cbc.

Is Cbc reliable?

Given that it is at version 0.7 it is reliable.

Is it fast?

It is not very fast out of the box, but is very flexible so it can be very effective with correct use of cut generators and heuristics. For instance, cut generators can be switched off, on every so often or only at root node (which is probably best default). I will be working on improving the stand-alone code to try and make it faster for less experienced users.

Does it use Clp?

It is written using the Osi interface so it can use any code which is supported. Obviously it can use Clp and that is what I am using so I can stress Clp. Going through Osi does make it a bit slower and I am seeing what I can do to reduce the overhead when using Clp.

What are its advantages?

A: It is designed to be less heavyweight than BCP or Symphony. It is very easy to add new cut generators and heuristics and branching methods such as lot-sizing variables. I need to publish some more heuristic methods as I have several I use for my own work which at present are too problem specific.

How should I start to use it?

There is a stand-alone code "cbc" which I need to improve, both for ease of use and for default behavior. There are also drivers in the Samples directory. The sample driver in Samples/sample1.cpp will solve many of the miplib test set as it is. To add a new generator involves adding less than ten lines of code. It is also possible to add heuristics in the same way and to influence the search - sample2.cpp and sample3.cpp expose more of the strategy as user code.