[Coin-discuss] getDualRays
Matthew Galati
magh at lehigh.edu
Mon Dec 1 11:28:16 EST 2003
The current implementation of OsiCpxSolverInterface::getDualRays seems
to give back incorrect rays, i.e., they do not provide a certificate. I
have not looked carefully at why yet - perhaps someone else can let me
know - otherwise I can try and debug.
An alternative is to use the built-in cplex call CPXdualfarkas. However,
I noticed that there seems to be a difference in the direction of the
dual ray as returned by different solvers. Following the CPX definition:
p is a proof iff
Let z_j = u_j where p' A_j > 0
= l_j where p' A_j < 0
p'b - p'Az > 0
the return of CPXdualfarkas does in fact provide a certificate. But, the
return of getDualRays from CLP (call it pCLP), does not. However, -pCLP
does. I am guessing this has to do with the solvers underlying assumptions?
This causes a problem, for example, when implementing branch and price
in BCP, since the different solver returns are inconsistent. To get both
CLP and CPX to work with BCP for branch and price, I changed OsiCpx's
implementation of getDualRays to use CPXdualfarkas, but I flip the
direction before returning. One additional problem I encountered, the
CPXdualfarkas requests the getEnvironmentPtr() and will not compile if
getDualRays is a const method. I made the method non-const, which, of
course, forced me to change the base class as well. If we do switch to
CPXdualfarkas maybe someone has a better solution.
Thanks,
Matt
--
Matthew Galati
ISE Lehigh University
IBM Service Parts Solutions
610.758.4042 (Office)
610.882.0779 (Home)
magh at lehigh.edu, magal11 at us.ibm.com
http://sagan.ie.lehigh.edu/mgalati/
More information about the Coin-discuss
mailing list