IPOPT解决方案并非最佳

时间:2017-03-29 21:12:57

标签: optimization mathematical-optimization nonlinear-optimization ipopt

我正在尝试使用IPOPT最小化非线性目标函数,并且它返回的解决方案不是最佳的。

即使我使用最优解决方案作为起点,IPOPT也会收敛到更糟糕的解决方案。

当我以错误的起点跑步时,这是输出:

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  1.5915818e+00 4.39e+04 1.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0 
   1r 1.5915818e+00 4.39e+04 9.99e+02   3.4 0.00e+00    -  0.00e+00 5.24e-14R  2 
   2r 1.5916062e+00 4.39e+04 9.99e+02   3.4 2.47e+05    -  6.88e-07 3.09e-05f  6 
   3r 1.5913804e+00 4.39e+04 9.98e+02   3.4 1.28e+05    -  1.39e-02 5.24e-04f  1 Nhj 
   4r 1.7302195e+00 3.47e+04 1.60e+04   3.4 1.17e+05    -  4.36e-03 1.70e-01f  1 
   5  1.7259751e+00 3.48e+04 2.47e+00  -1.0 1.71e+05    -  8.34e-02 2.23e-03h  1 Nhj 
   6  1.7259180e+00 3.49e+04 8.31e+00  -1.0 1.69e+05    -  5.66e-04 3.05e-05h  1 
   7  1.7213054e+00 3.48e+04 2.40e+00  -1.0 1.60e+05    -  2.83e-05 2.57e-03f  1 
   8  1.7156613e+00 3.47e+04 2.36e+00  -1.0 1.59e+05    -  2.10e-03 3.17e-03h  1 
   9  1.7153077e+00 3.46e+04 2.38e+00  -1.0 1.61e+05    -  7.58e-04 1.97e-04h  1 
...
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  82  5.2283523e-02 1.09e-11 1.32e-07  -8.6 3.57e-02  -5.4 1.00e+00 1.00e+00f  1 LA
  83  5.2283284e-02 1.46e-11 1.31e-07  -8.6 1.06e-01  -5.9 1.00e+00 1.00e+00h  1 LA
  84  5.2282973e-02 2.91e-11 6.68e-06  -8.6 3.02e-01  -6.4 1.00e+00 4.53e-01h  1 L
  85  5.2282772e-02 5.96e-08 4.90e-08  -8.6 3.57e-01  -6.9 1.00e+00 1.00e+00f  1 LA
  86  5.2281822e-02 2.18e-11 4.81e-08  -8.6 1.05e+00  -7.3 1.00e+00 1.00e+00h  1 LA
  87  5.2279361e-02 2.18e-11 4.47e-08  -8.6 2.93e+00  -7.8 1.00e+00 1.00e+00h  1 LA
  88  5.2273070e-02 2.21e-11 3.66e-08  -8.6 7.20e+00  -8.3 1.00e+00 1.00e+00h  1 LA
  89  5.2260125e-02 2.91e-11 2.19e-08  -8.6 1.29e+01  -8.8 1.00e+00 1.00e+00h  1 LA
  90  5.2241683e-02 2.91e-11 1.31e-08  -9.0 2.31e+01  -9.2 1.00e+00 1.00e+00h  1 LA
  91  5.2227314e-02 2.91e-11 7.68e-09  -9.0 4.08e+01  -9.7 1.00e+00 1.00e+00h  1 L

当我以最佳解决方案作为起点运行时,这是输出:

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  4.2238263e-02 7.20e-10 1.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0 
   1  4.2238710e-02 9.13e-10 6.51e+06  -1.0 2.34e+00    -  2.53e-07 6.51e-01f  1 
   2  4.2238710e-02 9.02e-10 3.42e+06  -1.0 8.14e+02    -  7.01e-01 7.01e-07f  1 Nhj 
   3  4.2240948e-02 1.82e-11 2.40e+06  -1.0 8.85e-01    -  1.98e-01 1.00e+00f  1 
   4  4.2243737e-02 1.82e-11 5.15e+05  -1.0 1.10e+00    -  7.85e-01 1.00e+00f  1 
   5  4.2256686e-02 1.46e-11 3.29e+05  -1.0 5.09e+00    -  3.62e-01 1.00e+00f  1 
   6  4.2276907e-02 3.64e-11 7.15e+04  -1.0 7.89e+00    -  7.82e-01 1.00e+00f  1 
   7  4.2358872e-02 7.28e-12 4.53e+04  -1.0 3.46e+01    -  3.67e-01 8.98e-01f  1 
   8  4.2500557e-02 3.64e-11 9.56e+03  -1.0 5.16e+01    -  7.89e-01 1.00e+00f  1 
   9  4.2549360e-02 1.46e-11 2.77e+06  -1.7 9.32e+01    -  7.48e-01 4.02e-01f  1 
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  10  4.3022272e-02 5.82e-11 4.81e+05  -1.7 2.12e+02    -  7.61e-01 1.00e+00f  1 
  11  4.3237732e-02 1.46e-11 3.11e+05  -1.7 1.08e+03    -  3.54e-01 1.11e-01f  1 
  12  4.6695825e-02 4.66e-10 1.35e+05  -1.7 1.33e+03    -  5.65e-01 1.00e+00f  1 
  13  4.8140406e-02 4.66e-10 7.16e+04  -1.7 3.20e+03    -  4.71e-01 1.65e-01f  1 
  14  6.8543786e-02 1.86e-09 2.54e+04  -1.7 4.66e+03    -  6.45e-01 1.00e+00f  1 
  15  7.7732125e-02 7.28e-12 1.45e+04  -1.7 9.09e+03    -  4.29e-01 2.44e-01f  1 
  16  1.3194167e-01 1.46e-11 3.45e+03  -1.7 1.21e+04    -  7.62e-01 1.00e+00f  1 
  17  1.5738427e-01 1.46e-11 2.23e-07  -1.7 2.79e+04    -  1.00e+00 1.00e+00f  1 
  18  9.7878546e-02 1.49e-08 1.46e+05  -8.6 2.56e+04    -  6.29e-01 7.02e-01f  1 
  19  8.5848103e-02 2.91e-11 6.48e+04  -8.6 1.13e+04    -  7.43e-01 5.71e-01f  1 
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  20  7.6224343e-02 1.49e-08 1.95e+03  -8.6 1.74e+04    -  6.69e-01 7.60e-01f  1 
  21  7.2006155e-02 1.09e-11 2.87e+04  -8.6 7.50e+03    -  7.52e-01 2.76e-01f  1 
  22  6.0908188e-02 7.59e-12 6.76e+03  -8.6 6.88e+03    -  8.01e-01 7.77e-01f  1 
  23  5.6481364e-02 2.98e-08 2.71e+03  -8.6 2.67e+03    -  8.92e-01 6.92e-01f  1 
  24  5.3171781e-02 1.46e-11 1.74e+02  -8.6 3.88e+03    -  8.61e-01 9.28e-01f  1 
  25  5.2347678e-02 1.49e-08 1.40e+00  -8.6 2.14e+03    -  9.70e-01 1.00e+00f  1 
  26  5.2289596e-02 2.98e-08 1.34e-02  -8.6 8.67e+03    -  9.90e-01 5.25e-01h  1 
  27  5.2234159e-02 1.46e-11 3.65e-12  -8.6 5.00e+04    -  1.00e+00 1.00e+00f  1 A
  28  5.2234158e-02 5.96e-08 2.22e-08  -8.6 2.22e-04  -4.0 1.00e+00 1.00e+00h  1 LA
  29  5.2234158e-02 2.91e-11 1.40e-01  -9.0 1.83e-03  -4.5 1.00e+00 1.25e-01h  4 L
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  30  5.2234154e-02 2.91e-11 4.29e-08  -9.0 3.87e-03  -5.0 1.00e+00 1.00e+00H  1 LA
  31  5.2234151e-02 2.91e-11 2.17e-08  -9.0 5.87e-03  -5.4 1.00e+00 1.00e+00h  1 LA
  32  5.2234138e-02 1.46e-11 2.18e-08  -9.0 1.77e-02  -5.9 1.00e+00 1.00e+00h  1 LA
  33  5.2234099e-02 5.96e-08 2.18e-08  -9.0 5.29e-02  -6.4 1.00e+00 1.00e+00h  1 LA
  34  5.2233984e-02 5.96e-08 2.16e-08  -9.0 1.57e-01  -6.9 1.00e+00 1.00e+00h  1 LA
  35  5.2233647e-02 1.46e-11 2.11e-08  -9.0 4.61e-01  -7.3 1.00e+00 1.00e+00h  1 LA
  36  5.2232686e-02 2.21e-11 1.96e-08  -9.0 1.29e+00  -7.8 1.00e+00 1.00e+00h  1 LA
  37  5.2230211e-02 5.96e-08 1.60e-08  -9.0 3.16e+00  -8.3 1.00e+00 1.00e+00h  1 LA
  38  5.2225108e-02 2.91e-11 9.58e-09  -9.0 5.66e+00  -8.8 1.00e+00 1.00e+00h  1 L

我已经尝试更改终止选项,但我总是得到相同的结果。我无法理解为什么它会从起点跑到最坏点。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

来自:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.589.5002&rep=rep1&type=pdf,在第672页。

作为内部点求解器,很难热烈启动IPOPT。默认情况下,仅传递变量的级别值 作为IPOPT的起点。将IPOPT选项的热启动初始点设置为yes将启用以下两个值: 变量和约束传递给IPOPT。 但是,如果传递了最佳原始和对偶值,则IPOPT在一次迭代内完成的预期行为就不会 达到了这种方式。这是因为默认情况下,IPOPT会将接近界限的任何初始值移入内部。

可以通过各种绑定推入和绑定压裂选项控制初始点移动量的大小。至 要使IPOPT在一次迭代中接受最佳的原始/双重解决方案,只需设置以下选项即可:

warm_start_init_point yes
warm_start_bound_push 1e-9
warm_start_bound_frac 1e-9
warm_start_slack_bound_frac 1e-9
warm_start_slack_bound_push 1e-9
warm_start_mult_bound_push 1e-9