<br><font size=2 face="sans-serif">Francois Margot found an inconsistency
in the tableau routines of Osi(Clp)SolverInterface. Given a constraint</font>
<br>
<br><font size=2 face="sans-serif">x + y <= 8</font>
<br>
<br><font size=2 face="sans-serif">the convention is to add a slack s so</font>
<br>
<br><font size=2 face="sans-serif"> x + y + s == 8 (
0 <= s <= infinity)</font>
<br>
<br><font size=2 face="sans-serif">and if the constraint is tight then
the slack is at its lower bound. Clp thinks in terms of row activities
so the constraint looks like</font>
<br>
<br><font size=2 face="sans-serif">x + y - s == 8 (-infinity <= s <=
0)</font>
<br>
<br><font size=2 face="sans-serif">so if the constraint is tight the slack
is at its upper bound.</font>
<br>
<br><font size=2 face="sans-serif">I think I managed to fix the +1/-1 issue
some months ago but I did not fix the slack status inconsistency. I
have now done that so that if other solvers provide the tableau functionality
then the status values should match up. I do not expect this to affect
many people but if you are checking whether a slack is at its lower or
upper bound by using something like getBasisStatus then double-check your
code still works.</font>
<br>
<br><font size=2 face="sans-serif">John Forrest</font>