[Coin-osi-devel] Re: [Coin-discuss] set MILP gap

Lou Hafer lou at cs.sfu.ca
Thu Oct 25 14:22:35 EDT 2007


Matt,

> Through Osi (OsiCpx and OsiCbc), how do you set the MILP gap to be used 
> by the solver upon calling branchAndBound( )?

	The short answer, if memory serves, is you can't.  There is no parameter
or method to do this, you need to dig down to the underlying solver's control
interface.

	I'm copying this into osi-devel because it begs a larger question about
OSI design.  OSI is already a huge, heavyweight interface.  Even so, it's at its
best when controlling a simplex-oriented LP solver.  OSI is growing ad hoc
extensions for some aspects of branch-and-cut, so by default it's growing ever
larger and heavier.

	The standard rebuttal is `But MIP gap is simple, and trivially easy to
add.'  Which is true.  But the set of B&C control parameters is huge, and adding
`just one more' is a never-ending story. It's frustrating to do microsurgery
while wearing boxing gloves.

	It seems to me that more parameters and methods is the wrong way to go.
>From the developer side, it places a huge burden on the implementor of a new
OSI.  From the user side, you have no guarantee that the underlying solver
supports any significant percentage of the many methods already in OSI.  The
goal of `plug-and-play' solvers is lost.

	From a software engineering viewpoint, it's bad because the complexity
and capabilities offered by the interface layer should be a reasonable match to
the capabilities of the underlying solver class (exterior point, interior point,
branch-and-cut, etc.). And the complexity of any individual class should be
limited if the internal and external interactions are to be understood.

	In any event, I'm just one opinion in this, and the issue deserves
debate.

							Lou




More information about the Osi mailing list