0

我正在尝试使用 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

我已经尝试更改终止选项,但我总是得到相同的结果。我不明白为什么它会从起点跑到更糟的点。

有任何想法吗?

4

1 回答 1

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
于 2018-10-24T10:14:57.797 回答