# [Ipopt] Less Optimum solution for successive runs

Tony Kelman kelman at berkeley.edu
Thu Apr 10 05:19:14 EDT 2014

```Udit,

Interior point algorithms are known for being difficult to warm start. There are various options in Ipopt to get as much of the solution warm-started as is reasonably possible (you’ll also need the dual variables), but the barrier parameter and other algorithmic details mean this doesn’t always work that well. Interior point algorithms generally converge better when initialized far from active constraints, but the optimum solution of most interesting constrained optimization problems tends to be on the boundary of the feasible region. And as far as the tolerances that you’ve provided to Ipopt are concerned, the two solutions you’re getting are essentially the same.

Separately, Ipopt is not generally recommended for problems with a small number of variables, very simple constraints, but complicated very expensive to evaluate black-box objective functions. It can be used for this type of problem, but there are probably better options. If you’re trying to solve a DAE-constrained optimization problem, Ipopt will perform much better if you can translate a discretization of the problem (via collocation or local Runge-Kutta type approximations) into a large-scale sparse set of constraints relating the differential variables over many discretization points. A modeling language such as AMPL, GAMS, Pyomo, etc can perform automatic differentiation on your problem formulation, saving you the hassle of manually calculating first and second derivatives of your discretized DAE.

-Tony

From: Udit Gupta
Sent: Wednesday, April 09, 2014 11:08 PM
To: ipopt at list.coin-or.org
Subject: [Ipopt] Less Optimum solution for successive runs

Hi,

I am using IpOpt to optimize a problem with 5 decision variables in successive runs. My first run involves using all 5 variables (relaxing all variables simultaneously). IpOpt terminates successfully and gives an optimum solution. Next I relax only one variable (4th) of the 5 (keeping other 4 variables constant from the earlier run). I find that IpOpt provides a relatively "bad" optimum solution with higher objective value (i am minimising my obj fn). NLP functions are being evaluated using a DAE solver.

First Run:

Total number of variables............................:        5
variables with only lower bounds:        0
variables with lower and upper bounds:        5
variables with only upper bounds:        0
Total number of equality constraints.................:        0
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 3.4059520e-001 0.00e+000 1.26e-001   0.0 0.00e+000    -  0.00e+000 0.00e+000   0
1 3.3227739e-001 0.00e+000 5.39e-002  -5.0 6.09e-002    -  9.86e-001 1.00e+000f  1
2 2.8068876e-001 0.00e+000 2.95e-002  -2.5 5.58e-001    -  9.75e-001 8.79e-001f  1
3 2.7651747e-001 0.00e+000 7.72e-003  -2.6 1.62e-001    -  9.93e-001 1.00e+000f  1
4 2.6969369e-001 0.00e+000 9.19e-003  -4.1 2.00e-001    -  9.98e-001 9.85e-001f  1
5 2.6371187e-001 0.00e+000 1.16e-002  -4.0 7.34e-001    -  1.00e+000 5.35e-001f  1
6 2.5342676e-001 0.00e+000 2.66e-002  -4.9 3.35e+000    -  1.00e+000 3.31e-001f  1
7 2.3664505e-001 0.00e+000 5.43e-002  -4.2 5.52e+000    -  8.07e-001 1.00e+000f  1
8 2.3213622e-001 0.00e+000 1.01e-002  -5.1 1.97e+000    -  1.00e+000 1.00e+000f  1
9 2.3155882e-001 0.00e+000 6.38e-003  -3.9 5.49e-001    -  1.00e+000 1.00e+000f  1
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
10 2.3030322e-001 0.00e+000 6.01e-003  -4.6 1.16e+000    -  9.98e-001 1.00e+000f  1
11 2.3008095e-001 0.00e+000 4.60e-002  -2.6 3.02e+001    -  5.36e-001 2.27e-001f  2
12 2.2783106e-001 0.00e+000 1.06e-001  -2.4 2.06e+001    -  1.00e+000 2.02e-001f  2
13 2.1571297e-001 0.00e+000 5.67e-002  -2.3 8.77e+000    -  1.00e+000 2.21e-001f  3
14 1.8078192e-001 0.00e+000 5.68e-002  -2.9 7.69e+000    -  9.97e-001 3.62e-001f  2
15 1.4540550e-001 0.00e+000 8.58e-002  -3.8 6.54e+000    -  1.00e+000 3.26e-001f  1
16 1.5533380e-001 0.00e+000 1.25e-001  -2.4 5.58e+000    -  9.45e-001 5.00e-001f  2
17 1.4003026e-001 0.00e+000 4.40e-002  -2.6 1.05e+000    -  1.00e+000 2.93e-001f  2
18 1.1513233e-001 0.00e+000 3.28e-002  -3.5 1.65e+000    -  1.00e+000 1.00e+000f  1
19 1.1058175e-001 0.00e+000 5.58e-002  -3.5 7.25e-001    -  1.00e+000 1.83e-001f  1
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
20 1.0840715e-001 0.00e+000 2.40e-002  -4.6 5.04e-001    -  1.00e+000 5.00e-001f  2
21 1.0730184e-001 0.00e+000 2.59e-003  -4.7 8.46e-002    -  1.00e+000 4.43e-001f  1
22 1.0693632e-001 0.00e+000 1.15e-003  -6.2 1.83e-002    -  1.00e+000 1.00e+000f  1
23 1.0692761e-001 0.00e+000 3.95e-005  -8.0 1.93e-003    -  1.00e+000 9.85e-001f  1
24 1.0692755e-001 0.00e+000 1.11e-004 -11.0 1.05e-003    -  1.00e+000 1.00e+000f  1
25 1.0692753e-001 0.00e+000 1.09e-006 -11.0 6.86e-004    -  1.00e+000 1.00e+000f  1

Number of Iterations....: 25

(scaled)                 (unscaled)
Objective...............:  1.0692753478330776e-001   1.0692753478330776e-001
Dual infeasibility......:  1.0936467431047899e-006   1.0936467431047899e-006
Constraint violation....:  0.0000000000000000e+000   0.0000000000000000e+000
Complementarity.........:  1.0027270245806282e-011   1.0027270245806282e-011
Overall NLP error.......:  1.0936467431047899e-006   1.0936467431047899e-006

Number of objective function evaluations             = 62
Number of objective gradient evaluations             = 26
Number of equality constraint evaluations            = 0
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 0
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 0
Total CPU secs in IPOPT (w/o function evaluations)   =     25.657
Total CPU secs in NLP function evaluations           =   1809.632

Optimal Solution : 5.24069, 1.21765, 5.77537e-10, 3.33815e-10, 3.99296e-10

Second Run: (The bold variable is changed in this run)
Total number of variables............................:        1
variables with only lower bounds:        0
variables with lower and upper bounds:        1
variables with only upper bounds:        0
Total number of equality constraints.................:        0
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.0692753e-001 0.00e+000 2.99e-002   0.0 0.00e+000    -  0.00e+000 0.00e+000   0
1 1.0998169e-001 0.00e+000 6.45e-002  -1.1 8.05e-002    -  9.98e-001 1.00e+000f  1
2 1.6595396e-001 0.00e+000 2.03e-002  -1.1 5.84e-001    -  1.00e+000 1.00e+000f  1
3 1.3200249e-001 0.00e+000 4.12e-003  -1.8 2.83e-001    -  1.00e+000 1.00e+000f  1
4 1.1346410e-001 0.00e+000 5.79e-003  -2.7 2.35e-001    -  1.00e+000 1.00e+000f  1
5 1.0877403e-001 0.00e+000 1.68e-003  -4.0 9.49e-002    -  1.00e+000 1.00e+000f  1
6 1.0735574e-001 0.00e+000 3.01e-004  -4.0 3.88e-002    -  1.00e+000 1.00e+000f  1
7 1.0696293e-001 0.00e+000 3.89e-005  -6.0 1.25e-002    -  1.00e+000 1.00e+000f  1
8 1.0692884e-001 0.00e+000 9.98e-007  -6.0 1.14e-003    -  1.00e+000 1.00e+000f  1

Number of Iterations....: 8

(scaled)                 (unscaled)
Objective...............:  1.0692884325163618e-001   1.0692884325163618e-001
Dual infeasibility......:  9.9778841742863659e-007   9.9778841742863659e-007
Constraint violation....:  0.0000000000000000e+000   0.0000000000000000e+000
Complementarity.........:  1.3088189011168833e-006   1.3088189011168833e-006
Overall NLP error.......:  1.3088189011168833e-006   1.3088189011168833e-006

Number of objective function evaluations             = 9
Number of objective gradient evaluations             = 9
Number of equality constraint evaluations            = 0
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 0
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 0
Total CPU secs in IPOPT (w/o function evaluations)   =     20.861
Total CPU secs in NLP function evaluations           =    228.325

EXIT: Optimal Solution Found.

Objective fn value changed from 1.0692753478330776e-001 ---> 1.0692884325163618e-001
Variable value changed from 3.33815e-10 ---> 4.36996e-5

I presume that for the second run, the optimal dual is calculated in the 8 iterations but my solution degrades from the starting point.

My options:
app->Options()->SetNumericValue("tol", 1e-5);
app->Options()->SetNumericValue("constr_viol_tol", 1e-10);
app->Options()->SetNumericValue("bound_frac", 1e-15);
app->Options()->SetNumericValue("bound_push", 1e-15);
app->Options()->SetNumericValue("tiny_step_tol", 1e-10);
app->Options()->SetNumericValue("tiny_step_y_tol", 1e-10);
app->Options()->SetNumericValue("bound_relax_factor", 0);
app->Options()->SetStringValue("hessian_approximation", "limited-memory");

Is there a way to avoid calculating new iterations or considering the initial solution as the final solution?

Thank You

Regards
Udit Gupta

--------------------------------------------------------------------------------
_______________________________________________
Ipopt mailing list
Ipopt at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/ipopt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20140410/6bc16354/attachment-0001.html>
```