<br><font size=2 face="sans-serif">George,</font>
<br>
<br><font size=2 face="sans-serif">Difficult to analyze unless you can
send me code that will duplicate problem.</font>
<br>
<br><font size=2 face="sans-serif">But looking at code the problem status
is set to -1 in 15 relevant places but after a quick look only one looks
as if it would give this problem. To check for the most likely set
modelPtr_->setLogLevel(63) and see if "looks like trouble"
occurs. If it does (from ClpSimplexDual.cpp:4433) then it means
what it says - in this case dual finished with slight negative reduced
costs and primal took too long to clear up. </font>
<br>
<br><font size=2 face="sans-serif">If this is the case then I need to improve
code or tell the user the problem is not well posed. If you have
logLevel at 63 then you will see scaling information - if some initial
elements are very small then you may wish to take out small elements from
your cuts (and relax rhs to compensate). Another possibility to try
is to set the hint to use primal rather than dual in the second resolve.</font>
<br>
<br><font size=2 face="sans-serif">As I said I can only throw out a few
suggestions without being able to duplicate problem.</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>Georges Kolomvos <Kolomvos.Georgios@lgi.ecp.fr></b>
</font>
<br><font size=1 face="sans-serif">Sent by: coin-discuss-bounces@list.coin-or.org</font>
<p><font size=1 face="sans-serif">03/01/2006 10:14 AM</font>
<table border>
<tr valign=top>
<td bgcolor=white>
<div align=center><font size=1 face="sans-serif">Please respond to<br>
Discussions about open source software for Operations Research
<coin-discuss@list.coin-or.org></font></div></table>
<br>
<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-discuss@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">[Coin-discuss] OsiClpSolverInterface::isAbandoned()</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2>Hi folks,<br>
<br>
I'm using COIN since 2years now, but i still consider myself a newbie.
I get<br>
straight to the problem: I'm solving many LPs in a row with the Clp solver
using<br>
Osi to construct them from scratch. Although they're all supposed to be<br>
solvable, some of them are unexpectedly abandoned. Searching where the
violent<br>
isAbandoned() signal comes from, i realized that isAbandoned() turns true
due to<br>
the "status_=-1" of my LP which seems to be peculiar. I append
the following<br>
lines from OsiClpSolverInterface.cpp (updated a week ago):<br>
bool OsiClpSolverInterface::isAbandoned() const<br>
{<br>
// not sure about -1 (should not happen) <br>
return (modelPtr_->status()==4||modelPtr_->status()==-1);<br>
}<br>
<br>
Let me describe you the context of the implementation i'm working on, which
may<br>
give a clue where the problem might come from. I'm currently coding some
variant<br>
of the "Nested Benders Decomposition" method widely known in
Stochastic<br>
Programming. The method requires solving at every iteration many LPs (some<br>
hundreds of thousands, that are only in a small part identical to each
other)<br>
which are modified at every iteration by appending new cuts (outer linearization<br>
s of the cost-to-go function) and changing the RHS. I've tried two ways
of<br>
representing these LPs and by the way any suggestions about what should
be more<br>
efficient/proper are welcome : (a) I created different OsiClpSolverInterfaces<br>
(one per LP) and (b) I created only one OsiClpSolverInterface but many<br>
OsiRowCuts (one per LP). I've experienced the described "bug"
in both<br>
representations, but i'll focus on the second one. At a given iteration,
say<br>
"i", i treat, say the "n" LP; i restore the problem
from the previous "n-1" LP<br>
(the part which is identical), i applyRowCuts(...) corresponding
to that LP, i<br>
proceed to any necessary modifications (in the objective and the RHS) and
i<br>
resolve(). Once i'm done with that LP, i deleteRows(...) corrsponding to
the<br>
cuts i applied and i pass to the next "n+1" LP. When all LPs
are treated, i go<br>
on to the "i+1" iteration.<br>
<br>
During this process, typically after the 2nd itération, i come across a<br>
progressively larger number of abandoned LPs. I should note that if i instruct<br>
the program to retry once more -i.e to resolve() the LP once more-, it<br>
*sometimes* returns the expected isProvenOptimal() signal. But as the iterations<br>
go by, this instruction seems to be of no use, as it keeps on belieiving
that<br>
the LP should be abandoned. If i export the model of such an abandoned
LP in mps<br>
format, the "interactive optimizer" clp finds the optimal solution.<br>
<br>
Thanks a lot for your time,<br>
<br>
Cheers, <br>
<br>
George<br>
<br>
----------------------------- <br>
<br>
Georges Kolomvos <br>
Laboratoire Génie Industriel <br>
Ecole Centrale Paris <br>
<br>
e-mail: kolomvos@lgi.ecp.fr <br>
Tel.: +33(0)689088790 <br>
_______________________________________________<br>
Coin-discuss mailing list<br>
Coin-discuss@list.coin-or.org<br>
http://list.coin-or.org/mailman/listinfo/coin-discuss<br>
</font></tt>
<br>