[Coin-discuss] OsiCpx optimality for MIPs
Brady Hunsaker
hunsaker at engr.pitt.edu
Fri Jan 28 16:03:26 EST 2005
Given that solution 1 seems to be the consensus choice (at least of
early responders), I'd ask an OsiCpx maintainer to update the code as
follows:
Lines 460-463 of OsiCpxSolverInterface.cpp should now be:
return ((probtypemip_ == false &&
(stat == CPX_STAT_OPTIMAL || stat == CPX_STAT_OPTIMAL_INFEAS)) ||
(probtypemip_ == true &&
(stat == CPXMIP_OPTIMAL || stat == CPXMIP_OPTIMAL_TOL)));
This just adds the CPXMIP_OPTIMAL_TOL.
Brady
Matthew Saltzman wrote:
> On Fri, 28 Jan 2005, Ted Ralphs wrote:
>
>> Matthew Saltzman wrote:
>>
>>> On Fri, 28 Jan 2005, Brady Hunsaker wrote:
>>>
>>>> I just ran into a quirk with OsiCpx solving a MIP. CPLEX 9.0 has
>>>> default gap parameters so that it stops the branch-and-bound process
>>>> if the gap gets within 0.01% or an absolute value of 0.000001.
>>>>
>>>> This caused the solution process to stop, but
>>>> OsiCpx->isProvenOptimal() returned false, because CPLEX returns a
>>>> separate return code (CPXMIP_OPTIMAL_TOL) for this situation.
>>>>
>>>> I believe this should be corrected. I can see two possible solutions:
>>>> 1. Reply true to isProvenOptimal() if CPXMIP_OPTIMAL_TOL is
>>>> returned, even though this is technically incorrect.
>>>> 2. Explicitly set the gap parameters to 0 in branchAndBound().
>>>>
>>>> I'm using the first solution right now, but I'd like to hear any
>>>> other opinions, especially from OsiCpx maintainers.
>>>>
>>>> Brady
>>>
>>>
>>>
>>> My first reaction is in favor of solution 1.
>>>
>>> (1) Overriding tolerances that users may have reason to set is a bad
>>> idea.
>>>
>>> (2) Most users probably would accept that a solution that's within
>>> tolerance is optimal "for all practical purposes". If a user wants a
>>> guarantee of optimality, he can set CPXMIP_OPTIMAL_TOL to zero himself.
>>>
>>> Is this a small enough example to pass around for testing? I wonder
>>> how other solver/SI combinations handle this issue.
>>>
>>
>> Setting the optimality tolerance to zero does not likely guarantee an
>> optimal solution either, unless the LP solver is using rational
>> arithmetic to obtain a verifiable lower bound. It would be nice to
>> require that the solver produce a verifiable optimal solution, but no
>> solver that I know of actually does this in reality. To be practical,
>> we are forced leave it up to the solver to determine what it means for
>> a solution to be optimal. Given that, it seems to make sense that
>> isProvenOptimal() should apply that same condition when responding to
>> the query.
>>
>> Cheers,
>
>
> So is that an argument for solution 1 or something else? It seems that
> the point is that CPLEX has return codes for "really, really optimal"
> and "sorta, kinda optimal enough, I guess", but OSI only has "optimal".
>
> It seems clear that solution 2 is a bad idea.
>
>>
>> Ted
>>
>
--
Brady Hunsaker
Assistant Professor
Industrial Engineering
University of Pittsburgh
http://www.engr.pitt.edu/hunsaker/
More information about the Coin-discuss
mailing list