[Coin-discuss] OsiClpSolverInterface::isAbandoned()

Georges Kolomvos Kolomvos.Georgios at lgi.ecp.fr
Wed Mar 1 10:14:01 EST 2006


Hi folks,

I'm using COIN since 2years now, but i still consider myself a newbie. I get
straight to the problem: I'm solving many LPs in a row with the Clp solver using
Osi to construct them from scratch. Although they're all supposed to be
solvable, some of them are unexpectedly abandoned. Searching where the violent
isAbandoned() signal comes from, i realized that isAbandoned() turns true due to
the "status_=-1" of my LP which seems to be peculiar. I append the following
lines from OsiClpSolverInterface.cpp (updated a week ago):
bool OsiClpSolverInterface::isAbandoned() const
{
  // not sure about -1 (should not happen)  
  return (modelPtr_->status()==4||modelPtr_->status()==-1);
}

Let me describe you the context of the implementation i'm working on, which may
give a clue where the problem might come from. I'm currently coding some variant
of the "Nested Benders Decomposition" method widely known in Stochastic
Programming. The method requires solving at every iteration many LPs (some
hundreds of thousands, that are only in a small part identical to each other)
which are modified at every iteration by appending new cuts (outer linearization
s of the cost-to-go function) and changing the RHS. I've tried two ways of
representing these LPs and by the way any suggestions about what should be more
efficient/proper are welcome : (a) I created different OsiClpSolverInterfaces
(one per LP) and (b) I created only one OsiClpSolverInterface but many
OsiRowCuts (one per LP). I've experienced the described "bug" in both
representations, but i'll focus on the second one. At a given iteration, say
"i", i treat, say the "n" LP; i restore the problem from the previous "n-1" LP
(the part which is identical), i applyRowCuts(...)  corresponding to that LP, i
proceed to any necessary modifications (in the objective and the RHS) and i
resolve(). Once i'm done with that LP, i deleteRows(...) corrsponding to the
cuts i applied and i pass to the next "n+1" LP. When all LPs are treated, i go
on to the "i+1" iteration.

During this process, typically after the 2nd itération, i come across a
progressively larger number of abandoned LPs. I should note that if i instruct
the program to retry once more -i.e to resolve() the LP once more-, it
*sometimes* returns the expected isProvenOptimal() signal. But as the iterations
go by, this instruction seems to be of no use, as it keeps on belieiving that
the LP should be abandoned. If i export the model of such an abandoned LP in mps
format, the "interactive optimizer" clp finds the optimal solution.

Thanks a lot for your time,

Cheers, 

George

----------------------------- 
  
Georges Kolomvos  
Laboratoire Génie Industriel  
Ecole Centrale Paris  
  
e-mail: kolomvos at lgi.ecp.fr  
Tel.: +33(0)689088790  



More information about the Coin-discuss mailing list