2

我正在尝试实现一种外部惩罚函数方法来最小化以下问题。

最小 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.

我的实施中的错误在哪里?谢谢。

4

1 回答 1

0

您的算法解决了以下等式约束问题!

最小化 f(x)=100*(x(2)-x(1)^2)^2+(1-x(1))^2

服从 x(1)+2x(2)=1 2x(1)+x(2)=1

并且fmincon(正确地)解决了原始问题(一个不等式和一个等式约束)。

于 2020-02-16T02:13:02.920 回答