[Coin-discuss] osiclpsolver optimal for infeasible problem?

John J Forrest jjforre at us.ibm.com
Tue Mar 14 13:25:57 EST 2006


Jan-Willem,

isDualObjectiveLimitReached is more complex.  It is possible that the 
current coding is incorrect but it may break people's code if it is 
changed.

Clp returns the same primal infeasible code when it is primal infeasible 
and when it is infeasible because dual limit exceeded.  When that code was 
written there was no secondary status to tell the difference.  The primal 
version checks to see if an objective limit was set - if not it returns 
false.  At present the dual version always returns true if primal 
infeasible, even if the dual limit has not been set.

I am quite happy to make changes but I am worried that people may just be 
doing a single test on dual limit rather than a test on dual limit and a 
test for primal infeasible, in which case their code will break.

I will sit back for a day or two and see if I get any comments.

John Forrest



"Jan-Willem Goossens" <j.goossens at t75.nl> 
Sent by: coin-discuss-bounces at list.coin-or.org
03/14/2006 12:04 PM
Please respond to
Discussions about open source software for Operations Research 
<coin-discuss at list.coin-or.org>


To
"Discussions about open source software for Operations Research" 
<coin-discuss at list.coin-or.org>
cc

Subject
Re: [Coin-discuss] osiclpsolver optimal for infeasible problem?






Hi,

John, thanks for the immediate fix!

This little problem is part of my own unit tests, which I only just
implemented. I 'borrowed' the example from
http://www.mosek.com/products/3/tools/doc/html/tools/node13.html#sec-priduainf-expdinf


I tested the new sources, and, indeed, the problem doesnt show up as
IsProvenOptimal anymore.

Now, however, next to IsProvenPrimalInfeasible, also
IsDualObjectiveLimitReached is "true". Since the dual of the problem is
infeasible, this doesnt seem right.


Jan-Willem


> Rather embarrassing.
>
> The problem started on this tiny example because it is also unbounded on
> x2 but it could have happened on other problems - the code somehow 
forgot
> that it was modifying an infeasibility weight and thought it had got in 
a
> loop!  Even then it should not said optimal.
>
> I should have it fixed now.  Jan-Willem, I hope that fixes your problems
> and thanks for taking the time to create such a small example.
>
> John
>
>
>
> "Jan-Willem Goossens" <j.goossens at t75.nl>
> Sent by: coin-discuss-bounces at list.coin-or.org
> 03/13/2006 10:43 AM
> Please respond to
> Discussions about open source software for Operations Research
> <coin-discuss at list.coin-or.org>
>
>
> To
> coin-discuss at list.coin-or.org
> cc
>
> Subject
> [Coin-discuss] osiclpsolver optimal for infeasible problem?
>
>
>
>
>
>
> Hi all,
>
> I tried to enter the following simple problem through the
> OsiClpSolverInterface:
>
> min  x1 - x2
> s.t. x1 == -1
>
> x1 >= 0, x2 >= 0
>
> This problem is primal infeasible and also dual infeasible.
> I enter it as follows
>
>
>                  OsiClpSolverInterface *s = new OsiClpSolverInterface();
>
>                  double inf = s->getInfinity();
>                  CoinPackedVector empty;
>
>                  s->addCol(empty, 0.0, inf, 1.0);
>                  s->addCol(empty, 0.0, inf,  -1.0);
>
>                  CoinPackedVector r0;
>                  r0.insert(0, 1);
>                  s->addRow(r0, -1.0, -1.0);
>
>                  s->setObjSense(1);
>
>                  s->initialSolve();
>
> So the "x1 == -1" is entered as -1 <= x1 <= -1.
>
> The output is as follows:
>
> Coin0508I Presolve thinks problem is unbounded
> Clp3003W Analysis indicates model infeasible or unbounded
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0006I 0  Obj 0 Primal inf 1 (1) Dual inf 1 (1)
> Clp0032I Optimal objective 0 - 0 iterations time 0.052
>
> The s->getColSolution() shows x1 = x2 = 0.0, and of all the "s->is...()"
> functions, only s->isProvenOptimal() returns true.
>
>
> Not unimportantly, I'm running this using Visual Studio .NET 2003, so
> there might be something there.
> I'm wondering if others get the same results?
> Or am I missing something?
>
> Regards,
>
> Jan-Willem Goossens
>
>
>
> _______________________________________________
> Coin-discuss mailing list
> Coin-discuss at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/coin-discuss
>
> _______________________________________________
> Coin-discuss mailing list
> Coin-discuss at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/coin-discuss
>

_______________________________________________
Coin-discuss mailing list
Coin-discuss at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/coin-discuss

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/coin-discuss/attachments/20060314/a18903f6/attachment.html>


More information about the Coin-discuss mailing list