[Couenne] SetCutoff()
Pietro Belotti
pbelott at clemson.edu
Sun May 8 23:15:12 EDT 2011
Francois,
> In Couenne/stable/0.3, the code for CouenneProblem::setCutoff(double
> value) always sets the value to
>
> cutoff + SafeCutoff * (1. + fabs(cutoff))
>
> where SafeCutoff is 1e-4. While that might be safe, it might also be
> disastrous for problems with many optimal solutions or many feasible
> solutions within SafeCutoff * (1. + fabs(optimal_value)) of the optimal
> value. While it might be a reasonable thing to do in some situations, it
> seems that when the code claims to have found a feasible solution with
> value v, the cutoff should be set to v, not slightly higher.
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.
Do you have specific examples? For example, if all those solutions have
(just like the cutoff) a very large value such as 1e+6, the cutoff is set
100 above where it should be. This can be avoided simply by adding an
_absolute_ term instead, i.e., by setting the cutoff as
cutoff + min (1., SafeCutoff * (1. + fabs (cutoff)))
but if, again, apart from large solution values, there were very large or
very small quantities in the problem, we may cut optima.
> I also noted that Couenne/stable/0.3 (downloaded today) does not
> terminate on nvs19. On a Fedora 13 (linux 64 bits) install, I get:
>
> Cbc0015I Node 175 Obj -1103.72 Unsat 100 depth 88
> ## WEAK up-br: [9.00000000 ,(9.00000000)] -> 9.00000000
>
> and then the last line repeats with no end. This is using
>
> bb_log_level 3
> variable_selection osi-strong
>
> and all other defaults as in the provided couenne.opt file.
I committed a revision in Couenne/stable that should take care of that.
Again, numerical issues: an integer variable whose value looks integer to
Cbc (which, I believe, has an infeasibility of 1e-7 or above) but not
Couenne, whose COUENNE_EPS, used in computing branching infeasibility, was
set to 1e-8. I simply restored COUENNE_EPS=1e-7, as it was not long ago.
nvs19 is now solved with the settings you provided (note: the very same
problem is giving troubles to Couenne/trunk...).
Cheers,
Pietro
More information about the Couenne
mailing list