<br><font size=2 face="sans-serif">Jean-Sebastien,</font>
<br>
<br><font size=2 face="sans-serif">The error was in CglProbing.cpp when
some large bounds were found. The error was in earlier versions so
I don't really know why it didn't show up before.</font>
<br>
<br><font size=2 face="sans-serif">I have also fixed printing.</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>Jean-Sebastien Roy <js@jeannot.org></b>
</font>
<br><font size=1 face="sans-serif">Sent by: coin-lpsolver-bounces@list.coin-or.org</font>
<p><font size=1 face="sans-serif">01/03/2005 05:38 PM</font>
<td width=59%>
<table width=100%>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td valign=top><font size=1 face="sans-serif">coin-lpsolver@list.coin-or.org</font>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td valign=top>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td valign=top><font size=1 face="sans-serif">[Coin-lpsolver] Cbc failure
with the integer presolve</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><font size=2><tt>Hi !<br>
<br>
Trying to update my cuting plane code to the latest Clp/Cbc version, I
<br>
encountered various problems, I did not encounter with the previous <br>
versions.<br>
<br>
For example, when solving the small attached test.mps MIP problem using
<br>
Cbc and the interger presolve, I get:<br>
Cbc0006I The LP relaxation is infeasible or too expensive<br>
<br>
I cannot reproduce the problem using the cbc executable itself, so I've
<br>
attached a small driver.cpp main that exhibit the problem on my <br>
computer. My driver is quite possibly the culprit here (since it works
<br>
with the cbc executable), but I'm not able to see exactly what's wrong
<br>
with it.<br>
<br>
The driver basically does :<br>
<br>
OsiClpSolverInterface solver1;<br>
CbcModel model(solver1);<br>
model.solver()->readMps("test.mps","mps");<br>
model.initialSolve();<br>
/* Add a few Cuts using model.addCutGenerator */<br>
CbcModel *model2 = model.integerPresolve();<br>
model2->branchAndBound();<br>
model.originalModel(model2,false);<br>
<br>
When not using the integerPresolve, it works fine. It the integer <br>
presolve unsafe to use ?<br>
<br>
(If matters, I used GCC 3.3.6. I wasn't able to compile Coin anymore <br>
using GCC 2.95.4, and GCC 3.4.4 made Clp crash badly on my computer (but
<br>
it may have been compilation flags))<br>
<br>
Thank you very much in advance for any help,<br>
<br>
Regards,<br>
<br>
js<br>
<br>
PS: For what is worth, with the current version of Clp/Cbc, I observe a
<br>
very small problem, that even with the logLevel equal to -1, some <br>
information are output by Coin, like:<br>
Coin0506I Presolve 1 (-2) rows, 2 (-1) columns and 2 (-4) elements<br>
<br>
#include <cassert><br>
#include <iostream><br>
<br>
#include "CoinError.hpp"<br>
#include "OsiCuts.hpp"<br>
#include "OsiClpSolverInterface.hpp"<br>
<br>
#include "CglCutGenerator.hpp"<br>
#include "CglGomory.hpp"<br>
#include "CglProbing.hpp"<br>
#include "CglKnapsackCover.hpp"<br>
#include "CglOddHole.hpp"<br>
#include "CglClique.hpp"<br>
#include "CglFlowCover.hpp"<br>
#include "CglMixedIntegerRounding.hpp"<br>
#include "CglTwomir.hpp"<br>
<br>
#include "CbcModel.hpp"<br>
#include "CbcHeuristic.hpp"<br>
<br>
using std::cerr;<br>
using std::cout;<br>
using std::endl;<br>
<br>
/* problem status */<br>
#define LpStatusNotSolved 0<br>
#define LpStatusOptimal 1<br>
#define LpStatusInfeasible -1<br>
#define LpStatusUnbounded -2<br>
#define LpStatusUndefined -3<br>
<br>
int main(int argc, const char *argv[])<br>
{<br>
int pulp_status;<br>
int presolve = 0, dual = 0, scale = 1, crash = 0, mip = 1,<br>
strong
= 5, cuts = 1, integerPresolve = 1, rounding = 0;<br>
<br>
try<br>
{<br>
OsiClpSolverInterface
solver1;<br>
CbcModel
model(solver1);<br>
<br>
model.solver()->readMps("test.mps.gz","mps");<br>
<br>
model.solver()->messageHandler()->setLogLevel(1);<br>
model.messageHandler()->setLogLevel(1);<br>
<br>
if
(presolve)<br>
model.solver()->setHintParam(OsiDoPresolveInInitial,true,OsiHintTry);<br>
if
(dual)<br>
model.solver()->setHintParam(OsiDoDualInInitial,true,OsiHintTry);<br>
if
(!scale)<br>
model.solver()->setHintParam(OsiDoScale,false,OsiHintTry);<br>
if
(crash)<br>
model.solver()->setHintParam(OsiDoCrash,true,OsiHintTry);<br>
<br>
model.initialSolve();<br>
<br>
if
(model.solver()->isProvenOptimal())<br>
pulp_status = LpStatusOptimal;<br>
else
if (model.solver()->isProvenPrimalInfeasible())<br>
pulp_status = LpStatusInfeasible;<br>
else
if (model.solver()->isProvenDualInfeasible())<br>
pulp_status = LpStatusUnbounded;<br>
else<br>
pulp_status = LpStatusUndefined;<br>
<br>
if
(pulp_status == LpStatusOptimal && mip)<br>
{<br>
model.solver()->messageHandler()->setLogLevel(-1);<br>
<br>
model.setNumberStrong(strong);<br>
<br>
/* Cuts */<br>
CglGomory gomory;<br>
CglProbing probing;<br>
probing.setUsingObjective(true);<br>
probing.setMaxPass(3);<br>
probing.setMaxProbe(100);<br>
probing.setMaxLook(50);<br>
probing.setRowCuts(3);<br>
CglKnapsackCover knapsackCover;<br>
CglOddHole oddHole;<br>
oddHole.setMinimumViolation(0.005);<br>
oddHole.setMinimumViolationPer(0.0002);<br>
oddHole.setMaximumEntries(100);<br>
<br>
if (cuts)<br>
{<br>
model.addCutGenerator(&gomory,-1,"Gomory");<br>
model.addCutGenerator(&probing,-1,"Probing");<br>
model.addCutGenerator(&knapsackCover,-1,"Knapsack");<br>
model.addCutGenerator(&oddHole,-1,"OddHole");<br>
}<br>
<br>
if (integerPresolve)<br>
{<br>
CbcModel
*model2 = model.integerPresolve();<br>
<br>
if
(model2)<br>
{<br>
/* Rounding */<br>
CbcRounding heuristic(*model2);<br>
if (rounding)<br>
model2->addHeuristic(&heuristic);<br>
model2->branchAndBound();<br>
model.originalModel(model2,false);<br>
}<br>
else<br>
pulp_status = LpStatusInfeasible;<br>
}<br>
else<br>
{<br>
/*
Rounding */<br>
CbcRounding
heuristic(model);<br>
if
(rounding)<br>
model.addHeuristic(&heuristic);<br>
<br>
model.branchAndBound();<br>
}<br>
}<br>
}<br>
catch ( CoinError e )<br>
{<br>
cout <<e.className() <<"::" <<e.methodName()
<<" - " <<e.message() <<endl;<br>
}<br>
<br>
return 0;<br>
}<br>
_______________________________________________<br>
Coin-lpsolver mailing list<br>
Coin-lpsolver@list.coin-or.org<br>
http://list.coin-or.org/mailman/listinfo/coin-lpsolver<br>
</tt></font>
<br>