<br><font size=2 face="sans-serif">Kish,</font>
<br>
<br><font size=2 face="sans-serif">I think it is correct to return true
on isProvenInfeasible if there is no valid solution to a MIP - what do
other people think?</font>
<br>
<br><font size=2 face="sans-serif">Try putting the test isProvenDualInfeasible
before isProvenInfeasible.</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>Kish Shen &lt;kish.shen@crosscoreop.com&gt;</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">07/14/2006 12:31 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 &nbsp; &nbsp;
&nbsp; &nbsp;&lt;coin-discuss@list.coin-or.org&gt;</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">Re: [Coin-discuss] bestPossibleObjective
for Cbc</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2>On Thursday 13 July 2006 17:53, Kish Shen wrote:<br>
&gt; John,<br>
&gt;<br>
&gt; Thanks. I have just downloaded Coin-Cbc in branches/devel, and the<br>
&gt; bestPossible is indeed working.<br>
&gt;<br>
&gt; I still get a failure instead of unbounded state returned for a simple<br>
&gt; unbounded problem. I need more time to look at the code to see what
has<br>
&gt; changed.<br>
&gt;<br>
&gt; I am however having problems with maximising problem -- I was doing
my<br>
&gt; unbounded test case with a maximising problem:<br>
&gt;<br>
&gt; max X<br>
&gt;<br>
&gt; X = Y<br>
&gt; X + Y &gt;= 3<br>
&gt; X is integer<br>
&gt;<br>
&gt; but this problem is now returning X, Y = 2, i.e. it seems to be minimising<br>
&gt; the problem rather than maximising!<br>
&gt;<br>
&gt; I have not had time to look at this in detail, but thought I should
post<br>
&gt; this before I leave today.<br>
&gt;<br>
I should have checked this in more detail before posting, but I was rushing
to <br>
leave. This problem is due to a my mistake -- I mistakenly commented out
the <br>
code that sets the optimisation sense when I was playing around with <br>
CoinPackedMatrix...<br>
<br>
However, the unbounded integer problem is still reported as a failure.
Is this <br>
the problem that have been fixed? The code I now use to test for the state
of <br>
a MIP solve try to avoid calling isProvenInfeasible() if the initialSolve
was <br>
not optimal, <br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
CbcModel* model = lpd-&gt;lp-&gt;mipmodel;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
if (model-&gt;isProvenOptimal()) return state_success; &nbsp;// optimal<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
if (model-&gt;isInitialSolveProvenOptimal()) <br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;.....<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
}<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
if (model-&gt;isInitialSolveAbandoned()) return state_lpaborted; <br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
if (model-&gt;isInitialSolveProvenPrimalInfeasible()) return state_fail;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
if (model-&gt;isInitialSolveProvenDualInfeasible()) return state_unbounded;<br>
<br>
for the unbounded problem, isInitialSolveProvenPrimalInfeasible() returns
<br>
true.<br>
<br>
For the same linear problem (i.e. without the integer constraints), <br>
isProvenPrimalInfeasible() correctly returns false after a call to <br>
initialSove() for the OsiCbcSolver.<br>
<br>
Cheers,<br>
<br>
Kish Shen &nbsp; <br>
&gt; Cheers,<br>
&gt;<br>
&gt; Kish<br>
&gt;<br>
&gt; On Tuesday 11 July 2006 23:12, John J Forrest wrote:<br>
&gt; &gt; Kish,<br>
&gt; &gt;<br>
&gt; &gt; bestPossible should be fixed in branches/devel - also unbounded.<br>
&gt; &gt;<br>
&gt; &gt; John Forrest<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Kish Shen<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;kish.shen@crossc<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;oreop.com&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;<br>
&gt; &gt; To Sent by: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;coin-discuss@list.coin-or.org<br>
&gt; &gt; coin-discuss-boun &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;cc<br>
&gt; &gt; ces@list.coin-or.<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;org &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;<br>
&gt; &gt; Subject [Coin-discuss]<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bestPossibleObjective
for Cbc<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;07/10/06 10:24
PM<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Please respond
to<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Discussions about<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; open
source<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;software
for<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Operations<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Research<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;coin-discuss@lis<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t.coin-or.org&gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Hi,<br>
&gt; &gt;<br>
&gt; &gt; I am interested in obtaining the best possible bound on the objective<br>
&gt; &gt; value<br>
&gt; &gt;<br>
&gt; &gt; from a MIP solve. This value is stored in bestPossibleObjective
in the<br>
&gt; &gt; CbcModel, but it seems that if the MIP search is exited without
searching<br>
&gt; &gt; the<br>
&gt; &gt; whole tree, because of setting of the allowable MIP gap (e,g,
as<br>
&gt; &gt; specified by<br>
&gt; &gt; CbcAllowableFractionGap), bestPossibleObjective is set to bestObjective<br>
&gt; &gt; at the end of the search.<br>
&gt; &gt;<br>
&gt; &gt; For example, in the following MIP solve of the bell3a problem:<br>
&gt; &gt;<br>
&gt; &gt; Cbc0012I Integer solution of 878430 found by heuristic after
150<br>
&gt; &gt; iterations<br>
&gt; &gt;<br>
&gt; &gt; and 2 nodes (1.46 seconds)<br>
&gt; &gt; Cbc0010I After 500 nodes, 156 on tree, 878430 best solution,
best<br>
&gt; &gt; possible 876741 (8.18 seconds)<br>
&gt; &gt; Cbc0011I Exiting as integer gap of 1689.38 less than 1e-10 or
0.3%<br>
&gt; &gt; Cbc0001I Search completed - best objective 878430, took 5109
iterations<br>
&gt; &gt; and<br>
&gt; &gt;<br>
&gt; &gt; 501 nodes (8.19 seconds)<br>
&gt; &gt;<br>
&gt; &gt; the search is exited early, with<br>
&gt; &gt;<br>
&gt; &gt; bestPossibleObjective = 876741<br>
&gt; &gt; bestObjective = 878430<br>
&gt; &gt;<br>
&gt; &gt; but by the time I call getBestPossibleObjValue() immediately
after the<br>
&gt; &gt; branchAndBound() call, it is already set to 878430. [I think
this is done<br>
&gt; &gt; around line 1700 of my copy of CbcModel.cpp]<br>
&gt; &gt;<br>
&gt; &gt; Is there any way I can get the original bestPossibleObjective
before it<br>
&gt; &gt; was<br>
&gt; &gt;<br>
&gt; &gt; set to bestObjective?<br>
&gt; &gt;<br>
&gt; &gt; Thanks and cheers,<br>
&gt; &gt;<br>
&gt; &gt; Kish<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Coin-discuss mailing list<br>
&gt; &gt; Coin-discuss@list.coin-or.org<br>
&gt; &gt; http://list.coin-or.org/mailman/listinfo/coin-discuss<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Coin-discuss mailing list<br>
&gt; &gt; Coin-discuss@list.coin-or.org<br>
&gt; &gt; http://list.coin-or.org/mailman/listinfo/coin-discuss<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Coin-discuss mailing list<br>
&gt; Coin-discuss@list.coin-or.org<br>
&gt; http://list.coin-or.org/mailman/listinfo/coin-discuss<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>