我正在尝试实现一种外部惩罚函数方法来最小化以下问题。
最小 f(x)=100*(x(2)-x(1)^2)^2+(1-x(1))^2
st, x(1)+2x(2)<=1
2x(1)+x(2)=1
首先,我找到了最小的 using 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
.
我的实施中的错误在哪里?谢谢。