<br><font size=2 face="sans-serif">Stefan,</font>
<br>
<br><font size=2 face="sans-serif">As I thought checkSolution was not doing
quite what you wanted. &nbsp;It left the slack variable super basic at
it's original value so complementarity was lost. &nbsp;What you wanted
was for all non-basic variables to be at indicated bound and then the values
of the basic variables computed.</font>
<br>
<br><font size=2 face="sans-serif">I have modified checkSolution() to checkSolution(int
setAtBounds=0). &nbsp;This means that default behavior is same but if setAtBounds
is 1 then values will be recomputed if any primal values moved while ==2
will always recompute. &nbsp;So try checkBounds(1) and see if that helps.</font>
<br>
<br><font size=2 face="sans-serif">John Forrest</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>Stefan Vigerske &lt;stefan@mathematik.hu-berlin.de&gt;</b>
</font>
<br><font size=1 face="sans-serif">Sent by: coin-lpsolver-bounces@list.coin-or.org</font>
<p><font size=1 face="sans-serif">03/09/2006 06:50 AM</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td><font size=1 face="sans-serif">coin-lpsolver@list.coin-or.org</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td><font size=1 face="sans-serif">Re: [Coin-lpsolver] optimality of a
dual solution after rhs change</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2>Hi,<br>
<br>
Thanks a lot for your help. I've never tried these methods before.<br>
But now I've a problem that after changing the bounds of a row of the problem,
<br>
the dual solution becomes infeasible. From my understanding of duality
<br>
theory, changing a right-hand-side shouldn't affect the feasibility space
of <br>
the dual problem, since the right-hand-side of the primal is the objective
of <br>
the dual.<br>
I tried this on a small example (see appendix). After increasing an upper
<br>
bound, there is a dual infeasibility reported which is exactly the value
of <br>
the dual variable for the row which bound had been changed.<br>
Also isProvenAbandoned() returns true, while isProvenOptimal() returns
false. <br>
I know that the last primal point might be not feasible or not optimal
after <br>
a change of the bounds of a row, but the dual point should stay feasible,
and <br>
I'm only interested whether it is still optimal.<br>
Is there a way to check only if the dual solution is still optimal after
a <br>
change of the bounds, like a isProvenDualOptimal() ?<br>
<br>
&gt; In my understanding the two methods you mention will re-compute the<br>
&gt; reduced costs and duals for a new objective BUT it would be up to
the user<br>
&gt; to check whether the solution is still optimal. &nbsp;The simplest
function to<br>
&gt; use is Clp's checksolution method. &nbsp;If you modify the problem
in any way<br>
&gt; and then use getModelPtr() to get a Clp pointer then after<br>
&gt; clpPpointer-&gt;checkSolution() you can check if the problem is still
optimal<br>
&gt; (and returned as such by OsiSolverInterface::isProvenOptimal). &nbsp;You
could<br>
&gt; also interrogate such ClpSimplex functions as numberDualInfeasibiliies()<br>
&gt; or sumDualInfeasibilities() or their primal counterparts for more
subtle<br>
&gt; information.<br>
<br>
Thanks again :-),<br>
Stefan<br>
<br>
-- <br>
Stefan Vigerske<br>
Humboldt University Berlin, Numerical Mathematics<br>
http://www.math.hu-berlin.de/~stefan<br>
_______________________________________________<br>
Coin-lpsolver mailing list<br>
Coin-lpsolver@list.coin-or.org<br>
http://list.coin-or.org/mailman/listinfo/coin-lpsolver<br>
</font></tt>
<br>