[Ipopt] AMPL loops tests fail with Ipopt
vladimir voloshinov
vladimir.voloshinov at gmail.com
Fri May 4 13:36:21 EDT 2012
I believe that the reason of the subject is that Ipopt returns dual
variables with opposite sign as other AMPL-compatible solvers do.
Take for example simplest problem:
|x| -> min
formulated as LP-problem
#---- TestDualLP.mod -----
var x;
var z;
minimize MOD: z;
s.t. upZ: x - z <= 0;
s.t. loZ: -z - x <= 0;
#-------------------------------
Running the following AMPL-script with different value of
option solver lpsolve | snopt | knitro | ipopt
#-----TestDualLP.amp-------
model TestDualLP.mod;
option solver lpsolve; #and with other: snopt, knitro, ipopt
solve LPp;
display x;
display upZ;
display loZ;
#-------------------------------
give the following result, i.e. marginal value of right side of "<= p"
constraint (d(min)/dp), NOT the Lagrange multiplier which is positive
!
-------
x = 0
upZ = -0.5
loZ = -0.5
-------
for lpsolve, snopt and knitro.
But for Ipopt signs of duals is opposite (i.e. Ipopt returns Lagrange
multiplier instead of marginal value).
-------
x = 5.19833e-23
upZ = -0.5
loZ = -0.5
-------
BTW I found appropriate ticket
https://projects.coin-or.org/OS/ticket/11 "OS/Ipopt gives wrong sign
on constraint dual values" which is marked "closed".
But when I compile Ipopt 3.10.2 (Linux 3.0.0-19-generic),
ASL(20101105) from OS distribution I found the same effect (Lagrange
multipliers instead of "dual/marginal_value".
Does it mean that we should use "Ipopt-specific" AMPL-script when
.dual is used!?
Regards,
Vladimir.
On Thu, May 3, 2012 at 8:00 PM, <ipopt-request at list.coin-or.org> wrote:
>
> 1. AMPL loops tests fail with Ipopt (vladimir voloshinov)
>
>
> ----------------------------------------------------------------------
>
> Dear sirs,
> I tried AMPL loops scripts (http://www.ampl.com/NEW/loop2.html) with
> different AMPL-solvers (on Linux):
> lpsolve, snopt, knitro and ipopt (Ipopt 3.10.0 (Linux
> 2.6.32-71.29.1.el6.x86_64), ASL(20110308)).
> and found that all solvers work properly except Ipopt (I tried multi1
> and multi2 examples only).
>
> I suspect that the reason is that Ipopt loses some dual variables
> between repeating "solve".
> Can somebody recommend any workaround?
> I found some notes here
> https://projects.coin-or.org/Ipopt/wiki/IpoptAddFeatures.
> Unfortunately, only setting addition option
> warm_start_init_point=yes
> did not help.
>
> Am I right that it is required to reproduce all ipopt_zL/U_in/out stuff also?
>
> Take multi2 for instance.
> With
> option solver ipopt;
> in multi2.run
> $ampl multi2.run
> fails with the following dump (final part of output)
> ===============================
> PHASE I -- ITERATION 3
>
> PRODUCT bands
>
> Error at _cmdno 104 executing "solve" command
> (file multi2.run, line 39, offset 1034):
> error processing param price['CLEV','STL']:
> failed check: param price['CLEV','STL'] = 0.6209092318224038
> is not <= 1e-06;
> Error at _cmdno 104 executing "solve" command
> (file multi2.run, line 39, offset 1034):
> error processing param price['PITT','STL']:
> failed check: param price['PITT','STL'] = 0.37909076811866227
> is not <= 1e-06;
> ===============================
> It means that the following constraints in multi2.mod are violated...
> param price {ORIG,DEST} <= 0.000001; # dual price on shipment limit
>
>
> Sincerely yours,
> --
> Vladimir V. Voloshinov,
> Ph.D, head of lab. C-3 "Distributed computing algorithms"
> Center of Grid-technologies & Distributed Computing, http://dcs.isa.ru,
> Institute for System Analysis Russ. Acad. Sci., http://www.isa.ru,
>
>
> ------------------------------
>
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt
>
>
> End of Ipopt Digest, Vol 89, Issue 1
> ************************************
More information about the Ipopt
mailing list