[Clp] Help: Incorrect solution from CBC

Michael Hennebry hennebry at web.cs.ndsu.nodak.edu
Thu Aug 28 22:32:46 EDT 2014


On Wed, 27 Aug 2014, Greg Gruber wrote:

> C190 is an indicator variable -- if it is 1 then 4000000 <= C225 <= 1E15.
> If C190 is 0, then C225 must equal 0.

I did the math.
You picked the smallest coefficients you could to get what you say you want.

> I cannot change the limits on C225.  Should I adjust the integer tolerance
> for C190?

Try a substitution: C225 = 2**50 * C225B .
It still might not work.
1E15/4E6 = 0.25E9 = 2.5E8

> I tried setting integerT from 1E-6 to 1E-10 and it had no effect.

After the substitution, it might help.
If it doesn't try things in roughly this order:
Look for other ways to massage the model.
Look for a platform with doubles that have more than 53 bits of precision.
Edit Clp to use long double instead of double on a platform where it matters.
Edit Clp to use iteration and a correctly rounded dot
product to improve the accuracy of basic solutions (1).
Make a platform with doubles that have more than 53 bits of precision.
My expectation is that a gcc guru could do
this on an Intel or Intel-clone platform.

(1) Some of the numbers suggest that they are the result of computation.
Their accuracy matters.
Look up "Safe bounds in linear and mixed-integer linear programming"

-- 
Michael   hennebry at web.cs.ndsu.NoDak.edu
"SCSI is NOT magic. There are *fundamental technical
reasons* why it is necessary to sacrifice a young
goat to your SCSI chain now and then."   --   John Woods


More information about the Clp mailing list