[Coin-osi-devel] Why Osi.branchAndBound()?
lou at cs.sfu.ca
Wed Mar 14 16:37:44 EDT 2007
Ted and I have been exchanging a bit of email related to the discussion
about OsiCbc, Osi.branchAndBound(), etc., and I thought I'd bring a piece of it
back out to the list.
Why does OSI include a branchAndBound() call?
OSI (to my mind) is fundamentally oriented to continuous simplex
optimisation. The definitions of the methods make that clear. Why add this one
method (branchAndBound) to handle MIP? If MIP, why not NLP, or MINLP, or CLP
(as in constraint logic programming)?
There's just a basic wrongness to creating an OsiXXX object that calls
OsiXXX.branchAndBound() that creates a CbcModel object that creates a new OsiXXX
object (several, actually :-) and finally calls CbcModel.branchAndBound().
If what we want is a `solve anything' class, then by all means let's
make one. But let's not clutter it up with a bunch of methods that are specific
to some particular problem class. And go top down. A `solve anything' solver
should be capable of diagnosing the problem and farming it out to a more
restricted solver class.
OsiCbc, OsiSym, and OsiXXX.branchAndBound() make little sense to me as
solvers for MIP problems. Sort of like trying to use a Blackberry while wearing
Going the other way, it is possible to write a good, efficient
branch-and-cut code that's agnostic about the underlying LP solver. And can use
other types of solvers where appropriate.
So, let's hear it --- why do we need this method at all? And if we do
need it, why does it belong in OsiSolverInterface?
More information about the Osi