[Ipopt] Why is IPOPT deoptimizing my problem?

Stefan Vigerske svigerske at gams.com
Sun Oct 20 14:11:11 EDT 2019


Hi,

around iteration 6, the dual infeasibility was relatively high, so even 
though the point satisfied all constraints, optimality conditions were 
not satisfied, so Ipopt kept going.
You didn't mention whether you actually told Ipopt that it should 
maximize, since by default it is minimizing. You can enable maximizing 
by setting the scaling factor for the objective function to -1.

Stefan

On 11/22/18 7:11 PM, Morten Bakkedal wrote:
> I'm trying to maximize an objection function subject to some inequality
> constraints. I'm puzzled why IPOPT converges nicely towards a maximum in
> iteration 6 below, and then consistently decreases the objective function
> again, never to reach the previous maximum.
> 
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du
> alpha_pr  ls
>     0 3.4514596e+000 0.00e+000 1.28e+004  -1.0 0.00e+000    -  0.00e+000
> 0.00e+000   0 y
>     1 4.0733925e+000 1.28e-011 7.98e+003  -1.0 5.36e-005   8.0 1.00e+000
> 1.00e+000f  1 Nhj
>     2 4.5348610e+000 6.86e-011 3.88e+003  -1.0 6.72e-005   7.5 1.00e+000
> 1.00e+000f  1
>     3 4.8755784e+000 3.59e-010 2.14e+003  -1.0 9.81e-005   7.0 1.00e+000
> 1.00e+000f  1
>     4 5.0819253e+000 1.81e-009 1.01e+003  -1.0 1.31e-004   6.6 1.00e+000
> 1.00e+000f  1
>     5 5.1863223e+000 8.85e-009 5.16e+002  -1.0 1.81e-004   6.1 1.00e+000
> 1.00e+000f  1
>     6 5.1984290e+000 3.93e-008 2.38e+002  -1.0 2.20e-004   5.6 1.00e+000
> 1.00e+000f  1
>     7 5.1398073e+000 1.93e-007 1.13e+002  -1.0 2.86e-004   5.1 1.00e+000
> 1.00e+000f  1
>     8 5.0214100e+000 9.48e-007 7.53e+001  -1.0 4.49e-004   4.7 1.00e+000
> 1.00e+000f  1
>     9 4.8496351e+000 4.46e-006 5.11e+001  -1.0 6.82e-004   4.2 1.00e+000
> 1.00e+000f  1
>    10 4.6276959e+000 2.05e-005 3.15e+001  -1.0 9.95e-004   3.7 1.00e+000
> 1.00e+000f  1
>    11 4.3503200e+000 9.00e-005 2.06e+001  -1.0 1.93e-003   3.2 1.00e+000
> 1.00e+000f  1
>    12 3.6612505e+000 2.55e-004 9.30e+001  -1.0 7.12e-002   2.8 6.58e-002
> 1.00e+000f  1
>    13 3.5887529e+000 9.20e-005 3.85e+000  -1.0 9.09e-004   3.2 1.00e+000
> 1.00e+000h  1
>    14 3.4504079e+000 5.40e-004 9.49e+000  -1.0 2.08e-003   2.7 1.00e+000
> 1.00e+000f  1
>    15 3.2575577e+000 3.55e-003 1.56e+001  -1.0 5.36e-003   2.2 1.00e+000
> 1.00e+000f  1
>    16 3.1991365e+000 7.87e-004 1.78e+000  -1.0 2.46e-003   2.6 1.00e+000
> 1.00e+000h  1
>    17 3.1065203e+000 9.52e-003 3.23e+000  -1.0 9.13e-003   2.2 1.00e+000
> 1.00e+000h  1
>    18 3.0739173e+000 1.78e-003 1.46e+000  -1.0 3.69e-003   2.6 1.00e+000
> 1.00e+000h  1
>    19 3.0011247e+000 1.72e-002 3.80e+000  -1.0 1.31e-002   2.1 1.00e+000
> 1.00e+000h  1
>    20 2.9751764e+000 3.29e-003 1.75e+000  -1.0 5.09e-003   2.5 1.00e+000
> 1.00e+000h  1
> 
> As I understand the documentation, inf_pr is the max norm of the constraint
> violation. However, according to my log, there is no violations at all in
> most of the steps.
> 
> The calculated derivatives have been carefully verified by plotting f(x)
> and f(x0)+f'(x0)*(x-x0), allowing visual inspection of consistency between
> f(x) and f'(x) (and in the same fashion between f'(x) and f''(x)), but the
> calculation is particularly challenging for this problem, so I'm not 100%
> sure.
> 
> I'm I understanding the way IPOPT works incorrectly or where do you suggest
> I start debugging my calculations? Derivatives? Scalings? I'm forced to use
> a fairly old version of IPOPT if that makes a difference.
> 
> 
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> https://list.coin-or.org/mailman/listinfo/ipopt
> 



More information about the Ipopt mailing list