[Couenne] SetCutoff()
Pietro Belotti
pbelott at clemson.edu
Sun May 22 07:37:33 EDT 2011
Francois,
>> I agree. I did that precisely for safety reasons, as bound reduction
>> procedures were cutting out optimal solutions because of tight cutoffs.
>> This shouldn't happen, but this is mostly a problem that shows up when
>> the model contains very small or very large constants, or both. 1e-4
>> seems a reasonable tradeoff between not eliminating feasible solutions
>> and avoiding suboptimal regions.
>
> On some problem (ex1233, for example), it happens that the value of the
> LP relaxation becomes larger than the value of the best known solution
> for a large number of nodes. The nodes are not pruned, as the cutoff is
> set to roughly 155026 while the best known solution has value 155011.
> This does not look like much, but the lower bound inches up very slowly
> and going from 155011 to 155026 is quite some work.
I have modified (in trunk and stable/0.3) the code so that the realcutoff
is set at
cutoff + min (SafeDelta, SafeCutoff * (1 + abs (cutoff)))
where SafeCutoff is the same parameter as before and SafeDelta is, for
now, set to 0.1. In my opinion, setting SafeDelta to a larger value would
perpetuate the problem you point out, while a very small value might give
the same numerical issues we are trying to avoid. We can make both user
parameters, if necessary. I expect SafeDelta to be more sensible when the
objective function value is larger in absolute value.
> I see problems finding a solution reasonably close to the optimal one
> only sometimes on csched1. That problem has bad numerics and I don't
> think that worrying about it makes much sense. Whatever the safety
> settings you put in, one can find a badly formulated problem for which
> the solution will not be found.
OK, though for usability I'd prefer to be robust enough to be able to
solve the average-case problem (which sometimes has bad numerics).
> That might fix it for nvs19, but I also observed that the code enters an
> infinite loop when the following happens: An integer variable x_i has
> bounds [a, a] (i.e. it is fixed) but has value a - 1e-7 in the solution
> of the LP relaxation. The Cbc object for x_i says that it has an
> infeasibility of 0.
The cleanest way would be for Cbc to take care of this, but if the
official policy of Cbc is to ignore small out-of-bound values, it should
be done by Couenne as well.
> I could fix it by not adding the integer violation in the couenne object
> if the bounds of x_i are identical. That fixes it. (Maybe a better
> solution is not to add the integer violation in the couenne object if
> the value of x_i is slightly out of bounds.)
The latter would also take care of the case in which lower and upper
bounds are different and x_i is either lb - 1e-7 or ub + 1e-7, which
should also be a case in which branching is not necessary. I have
implemented and committed this version, but can't test it as I don't know
what instance gave that behaviour. Please let me know if it still happens.
Pietro
More information about the Couenne
mailing list