我正在尝试实现外部惩罚函数方法以最小化以下问题。
最小f(x)= 100 *(x(2)-x(1)^ 2)^ 2 +(1-x(1))^ 2
s.t,x(1)+ 2x(2)<= 1
2x(1)+ x(2)= 1
首先,我使用fmincon
找到了最小值,答案为x
:array([ 0.4149, 0.1701])
和f(x)=0.34
。
然后,我尝试使用我的外部惩罚函数方法来找到最小值。我正在使用此惩罚函数:
F(x,a)= f(x)+ a *(x(1)+ 2 * x(2)-1)^ 2 + a *(2 * x(1)+ x(2)-1 )^ 2
具有起点x_0=[1,1]
,a=10
(在每次迭代中,a = a ^ 2),这给了我x
:array([ 0.3333, 0.3333])
和f(x)=5.3
。
我的实现错误在哪里?谢谢。
您的算法解决了以下equality约束问题!
最小化f(x)= 100 *(x(2)-x(1)^ 2)^ 2 +(1-x(1))^ 2
取决于x(1)+ 2x(2)= 12x(1)+ x(2)= 1
和fmincon
(正确)解决了原始问题(具有一个不等式和一个相等约束)。