<br><font size=2 face="sans-serif">Francois Margot found an inconsistency
in the tableau routines of Osi(Clp)SolverInterface. &nbsp;Given a constraint</font>
<br>
<br><font size=2 face="sans-serif">x + y &lt;= 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">&nbsp;x + y + s == 8 &nbsp; &nbsp;(
0 &lt;= s &lt;= infinity)</font>
<br>
<br><font size=2 face="sans-serif">and if the constraint is tight then
the slack is at its lower bound. &nbsp;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 &lt;= s &lt;=
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. &nbsp;I
have now done that so that if other solvers provide the tableau functionality
then the status values should match up. &nbsp;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>