[Coin-lpsolver] optimality of a dual solution after rhs change

John J Forrest jjforre at us.ibm.com
Thu Mar 9 09:36:22 EST 2006


Stefan,

Will look into it in the next few days.  Abandoned may be "best" return 
setting - it really should be "unknown" (Clp problem status -1).

Could be something simple such as slack is at ub, ub is increased but 
value of slack stays same.  So problem is still primal feasible but 
complementarity has gone.  Code knows it has to be at bound but might  put 
it to wrong bound.   As I said I can try and look at it soon.

John Forrest




Stefan Vigerske <stefan at mathematik.hu-berlin.de> 
Sent by: coin-lpsolver-bounces at list.coin-or.org
03/09/2006 06:50 AM

To
coin-lpsolver at list.coin-or.org
cc

Subject
Re: [Coin-lpsolver] optimality of a dual solution after rhs change






Hi,

Thanks a lot for your help. I've never tried these methods before.
But now I've a problem that after changing the bounds of a row of the 
problem, 
the dual solution becomes infeasible. From my understanding of duality 
theory, changing a right-hand-side shouldn't affect the feasibility space 
of 
the dual problem, since the right-hand-side of the primal is the objective 
of 
the dual.
I tried this on a small example (see appendix). After increasing an upper 
bound, there is a dual infeasibility reported which is exactly the value 
of 
the dual variable for the row which bound had been changed.
Also isProvenAbandoned() returns true, while isProvenOptimal() returns 
false. 
I know that the last primal point might be not feasible or not optimal 
after 
a change of the bounds of a row, but the dual point should stay feasible, 
and 
I'm only interested whether it is still optimal.
Is there a way to check only if the dual solution is still optimal after a 

change of the bounds, like a isProvenDualOptimal() ?

> In my understanding the two methods you mention will re-compute the
> reduced costs and duals for a new objective BUT it would be up to the 
user
> to check whether the solution is still optimal.  The simplest function 
to
> use is Clp's checksolution method.  If you modify the problem in any way
> and then use getModelPtr() to get a Clp pointer then after
> clpPpointer->checkSolution() you can check if the problem is still 
optimal
> (and returned as such by OsiSolverInterface::isProvenOptimal).  You 
could
> also interrogate such ClpSimplex functions as numberDualInfeasibiliies()
> or sumDualInfeasibilities() or their primal counterparts for more subtle
> information.

Thanks again :-),
Stefan

-- 
Stefan Vigerske
Humboldt University Berlin, Numerical Mathematics
http://www.math.hu-berlin.de/~stefan
_______________________________________________
Coin-lpsolver mailing list
Coin-lpsolver at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/coin-lpsolver

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/clp/attachments/20060309/0dc4015f/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: clptest.cpp
Type: application/octet-stream
Size: 2136 bytes
Desc: not available
URL: <http://list.coin-or.org/pipermail/clp/attachments/20060309/0dc4015f/attachment.obj>


More information about the Clp mailing list