<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. It left the slack variable super basic at
it's original value so complementarity was lost. 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). 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. 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 <stefan@mathematik.hu-berlin.de></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>
> In my understanding the two methods you mention will re-compute the<br>
> reduced costs and duals for a new objective BUT it would be up to
the user<br>
> to check whether the solution is still optimal. The simplest
function to<br>
> use is Clp's checksolution method. If you modify the problem
in any way<br>
> and then use getModelPtr() to get a Clp pointer then after<br>
> clpPpointer->checkSolution() you can check if the problem is still
optimal<br>
> (and returned as such by OsiSolverInterface::isProvenOptimal). You
could<br>
> also interrogate such ClpSimplex functions as numberDualInfeasibiliies()<br>
> or sumDualInfeasibilities() or their primal counterparts for more
subtle<br>
> 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>