我正在尝试使用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
我已经尝试更改终止选项,但我总是得到相同的结果。我无法理解为什么它会从起点跑到最坏点。
有什么想法吗?
答案 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