Hi,
I'm developing functionalities in another COIN-OR project, namely the SYMPHONY MILP branch-and-cut solver, which is using CLP (via OSI) for solving LP relaxations.
I need to collect a ray proving primal infeasibility/dual unboundedness, whenever a LP is primal infeasible. As of now, I achieve that by calling the method OsiClpSolverInterface.getDualRays(). The issue is that, apparently, this function returns a non-null vector<double> only when the method OsiClpSolverInterface.initialSolve() is invoked for solving the LP, while for subsequent calls of OsiClpSolverInterface.resolve() getDualRays() will return an empty vector even if isProvenDualInfeasible() == true. It is important in my context that a ray is always returned for infeasible primal LPs. As of now, when this happens I'm resolving from scratch an additional LP by calling initialSolve(), but of course I'd like not to undertake this additional computational burden. Would it be possible to achieve that?
Given an LP in general form (i.e. with any combination of <=, >=, = constraints), defined by matrix $A$, right-hand side $b$ and objective func $c$, with general bounds $l \leq x \leq u$ given as input to CLP and suppose this LP is primal infeasible. Given the ray $\lambda$ returned by CLP, I need to verify the Farkas proof apply for a different set of $b^\prime, l^\prime, u^\prime$.
My question is the following: Does the ray $\lambda$ returned by CLP correspond to a ray for the LP in general form as given in input? Or does it correspond to a ray to the LP CLP is internally creating (e.g. after preprocessing/scaling...)? Clearly, I would need the ray to correspond to the LP as given in input.
P.S. these are the option being set:
setupForRepeatedUse()
setHintParam(OsiDoScale,false,OsiHintDo)
setHintParam(OsiDoPresolveInInitial, false, OsiHintDo)
setHintParam(OsiDoPresolveInResolve, false, OsiHintDo) (only when resolve() is called)
setCleanupScaling(1)
int sp = si->specialOptions(); if ((sp & 2) != 0) sp ^= 2; si->setSpecialOptions(sp); to set special options.
Thanks for you time in advance,
Federico
Hi,
I'm developing functionalities in another COIN-OR project, namely the SYMPHONY MILP branch-and-cut solver, which is using CLP (via OSI) for solving LP relaxations.
I need to collect a ray proving primal infeasibility/dual unboundedness, whenever a LP is primal infeasible. As of now, I achieve that by calling the method
OsiClpSolverInterface.getDualRays(). The issue is that, apparently, this function returns a non-nullvector<double>only when the methodOsiClpSolverInterface.initialSolve()is invoked for solving the LP, while for subsequent calls ofOsiClpSolverInterface.resolve()getDualRays()will return an empty vector even ifisProvenDualInfeasible() == true. It is important in my context that a ray is always returned for infeasible primal LPs. As of now, when this happens I'm resolving from scratch an additional LP by callinginitialSolve(), but of course I'd like not to undertake this additional computational burden. Would it be possible to achieve that?Given an LP in general form (i.e. with any combination of$A$ , right-hand side $b$ and objective func $c$ , with general bounds $l \leq x \leq u$ given as input to CLP and suppose this LP is primal infeasible. Given the ray $\lambda$ returned by CLP, I need to verify the Farkas proof apply for a different set of $b^\prime, l^\prime, u^\prime$ .$\lambda$ returned by CLP correspond to a ray for the LP in general form as given in input? Or does it correspond to a ray to the LP CLP is internally creating (e.g. after preprocessing/scaling...)? Clearly, I would need the ray to correspond to the LP as given in input.
<=, >=, =constraints), defined by matrixMy question is the following: Does the ray
P.S. these are the option being set:
setupForRepeatedUse()setHintParam(OsiDoScale,false,OsiHintDo)setHintParam(OsiDoPresolveInInitial, false, OsiHintDo)setHintParam(OsiDoPresolveInResolve, false, OsiHintDo)(only whenresolve()is called)setCleanupScaling(1)int sp = si->specialOptions(); if ((sp & 2) != 0) sp ^= 2; si->setSpecialOptions(sp);to set special options.Thanks for you time in advance,
Federico