# [Ipopt] Slow convergence

Andreas Waechter andreasw at watson.ibm.com
Fri Oct 16 12:43:21 EDT 2009

```Hi Praveen

It is difficult to make a statement without knowing the problem better,
but maybe the following helps:

1. Make sure your first derivatives are correct.
2. Make sure the problem is scaled well (I notice that the step sizes
||d|| are quite small).  Try to scale up the objective function
(obj_scaling_factor option).  Make sure your objecgive
function and constraint have derivatives on the the order of at least 1.
3. You are using the quasi-Newton approximation.  This can easily converge
slower than using exact second derivatives.  Is it not possible in your
application to compute the Hessian of the Lagrangian method?
4. If you want to stick with the quasi-Newton, you can play with options
related to the update.
5. Adjust your expectations: In nonlinear problems, it can easily happen
that a small problem takes a large number of iterations, depending on
the nonlinearity of your problem, and on your starting point,
particularly if you are using a Hessian approximation.  30 iterations
for solving an NLP is certainly not very large.
The algorithm is rejecting many steps which might mean that your
objective function is quite nonlinear...

God luck,

Andreas

On Mon, 12 Oct 2009, Praveen C wrote:

> I have a problem with one non-linear constraint. I have attached the
> output of an optimization. The constraint is very easily satisfied from
> the first iteration itself. But ipopt seems to converge very slowly for
> this problem. In fact I do not get convergence in 30 iterations and
> about 100 function evaluations. Is it possible to find out what is
> causing this slow convergence ?
>
> Thanks
> praveen
>
> List of user-set options:
>
>                                    Name   Value                used
>                          acceptable_tol = 0.01                  yes
>                           compl_inf_tol = 0.01                  yes
>                         constr_viol_tol = 0.01                  yes
>                            dual_inf_tol = 0.01                  yes
>                   hessian_approximation = limited-memory        yes
>              limited_memory_max_history = 6                     yes
>                                max_iter = 30                    yes
>                             mu_strategy = monotone              yes
>                             output_file = ipopt.out             yes
>                             print_level = 5                     yes
>                      print_user_options = yes                   yes
>                                     tol = 0.01                  yes
>
> ******************************************************************************
> This program contains Ipopt, a library for large-scale nonlinear optimization.
> Ipopt is released as open source code under the Common Public License (CPL).
>         For more information visit http://projects.coin-or.org/Ipopt
> ******************************************************************************
>
> This is Ipopt version 3.7.0, running with linear solver ma27.
>
> Number of nonzeros in equality constraint Jacobian...:       10
> Number of nonzeros in inequality constraint Jacobian.:        0
> Number of nonzeros in Lagrangian Hessian.............:        0
>
> Total number of variables............................:       10
>                     variables with only lower bounds:        0
>                variables with lower and upper bounds:       10
>                     variables with only upper bounds:        0
> Total number of equality constraints.................:        1
> Total number of inequality constraints...............:        0
>        inequality constraints with only lower bounds:        0
>   inequality constraints with lower and upper bounds:        0
>        inequality constraints with only upper bounds:        0
>
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>   0  1.0000000e+00 0.00e+00 2.92e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
> Warning: Cutting back alpha due to evaluation error
>   1  9.3218634e-01 4.83e-14 9.43e-01  -1.0 7.11e-02    -  1.00e+00 8.70e-02f  4
>   2  9.2273589e-01 1.04e-13 4.19e+00  -1.7 1.42e-02    -  1.00e+00 1.25e-01f  4
>   3  9.2166788e-01 5.53e-13 2.00e+00  -1.7 1.81e-03    -  1.00e+00 1.00e+00f  1
>   4  9.2109032e-01 9.21e-13 2.13e+00  -1.7 1.40e-03    -  1.00e+00 5.00e-01f  2
>   5  9.1805379e-01 2.65e-12 6.82e-01  -1.7 5.32e-04    -  1.00e+00 1.00e+00f  1
>   6  9.1754089e-01 6.65e-12 6.74e-01  -1.7 2.84e-04    -  1.00e+00 1.00e+00f  1
>   7  9.1636554e-01 6.59e-12 1.06e+00  -1.7 2.73e-02    -  1.00e+00 3.12e-02f  6
>   8  9.1085596e-01 1.97e-11 1.61e+00  -1.7 4.81e-03    -  1.00e+00 1.00e+00f  1
>   9  9.0634559e-01 5.47e-11 2.32e+00  -1.7 5.73e-03    -  1.00e+00 1.00e+00f  1
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>  10  9.0338670e-01 1.48e-10 7.97e-01  -1.7 3.77e-03    -  1.00e+00 1.00e+00f  1
>  11  9.0299679e-01 9.07e-12 2.23e+00  -1.7 3.42e-03    -  1.00e+00 2.50e-01f  3
>  12  9.0078352e-01 4.21e-12 5.74e-01  -1.7 4.11e-03    -  1.00e+00 5.00e-01f  2
>  13  9.0048649e-01 2.95e-12 2.81e+00  -1.7 5.07e-03    -  1.00e+00 6.25e-02f  5
>  14  8.9893907e-01 4.81e-12 1.21e+00  -1.7 1.86e-03    -  1.00e+00 1.00e+00f  1
>  15  8.9909228e-01 3.19e-12 1.26e+00  -1.7 1.22e-03    -  1.00e+00 2.50e-01f  3
>  16  8.9912056e-01 4.68e-12 7.54e-01  -1.7 6.43e-04    -  1.00e+00 5.00e-01f  2
>  17  8.9953878e-01 5.25e-12 2.71e-01  -1.7 1.29e-03    -  1.00e+00 5.00e-01f  2
>  18  8.9957048e-01 1.16e-12 4.83e-01  -1.7 2.87e-03    -  1.00e+00 6.25e-02f  5
>  19  8.9950272e-01 2.88e-12 5.58e-01  -1.7 6.06e-04    -  1.00e+00 2.50e-01f  3
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>  20  8.9943346e-01 1.11e-11 5.58e-01  -1.7 3.95e-04    -  1.00e+00 1.00e+00f  1
>  21  8.9943889e-01 1.11e-11 2.31e-01  -1.7 1.83e-03    -  1.00e+00 7.81e-03f  8
>  22  8.9951131e-01 1.46e-11 3.59e-01  -1.7 6.37e-04    -  1.00e+00 5.00e-01f  2
>  23  8.9951224e-01 9.32e-12 5.61e-01  -1.7 9.48e-04    -  1.00e+00 6.25e-02f  5
>  24  8.9942348e-01 7.51e-12 5.12e-01  -1.7 7.24e-04    -  1.00e+00 5.00e-01f  2
>  25  8.9941830e-01 6.04e-12 3.69e-01  -1.7 4.64e-04    -  1.00e+00 6.25e-02f  5
>  26  8.9937708e-01 1.49e-11 1.73e-01  -1.7 1.49e-04    -  1.00e+00 1.00e+00f  1
>  27  8.9830206e-01 4.05e-11 1.49e+00  -2.5 2.12e-03    -  1.00e+00 1.00e+00f  1
>  28  8.9801104e-01 3.49e-11 2.44e+00  -2.5 4.08e-02    -  1.00e+00 2.83e-02f  6
>  29  8.9535303e-01 9.35e-11 1.63e+00  -2.5 7.12e-03    -  1.00e+00 1.00e+00f  1
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>  30  8.9523790e-01 5.23e-11 1.63e+00  -2.5 1.46e-02    -  1.00e+00 1.25e-01f  4
>
> Number of Iterations....: 30
>
>                                   (scaled)                 (unscaled)
> Objective...............:   8.9523789616951255e-01    8.9523789616951255e-01
> Dual infeasibility......:   1.6296134728676277e+00    1.6296134728676277e+00
> Constraint violation....:   5.2255866300754406e-11    5.2255866300754406e-11
> Complementarity.........:   3.5541737998279169e-03    3.5541737998279169e-03
> Overall NLP error.......:   1.6296134728676277e+00    1.6296134728676277e+00
>
>
> Number of objective function evaluations             = 103
> Number of objective gradient evaluations             = 31
> Number of equality constraint evaluations            = 103
> Number of inequality constraint evaluations          = 0
> Number of equality constraint Jacobian evaluations   = 31
> Number of inequality constraint Jacobian evaluations = 0
> Number of Lagrangian Hessian evaluations             = 0
> Total CPU secs in IPOPT (w/o function evaluations)   =      0.103
> Total CPU secs in NLP function evaluations           =      0.043
>
> EXIT: Maximum Number of Iterations Exceeded.
>
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt
>

```

More information about the Ipopt mailing list