优化设计-混合惩罚函数法-MATLAB编程

  • 优化设计-混合惩罚函数法-MATLAB编程
  • MATLAB代码


优化设计-混合惩罚函数法-MATLAB编程

内点法容易处理具有不等式约束条件的优化问题,而外点法则容易处理具有等式或不等式约束条件的优化问题。内点法和外点法有各自的优缺点,如将两者结合起来,则可以更好地同时处理既具有等式约束条件,又具有不等式约束条件的优化问题,这就是混合惩罚函数法,简称混合法。

惩罚函数法python程序 惩罚函数法matlab程序_惩罚函数法python程序


混合惩罚函数的含义是:对于初始点x(0)已满足不等式约束的约束函数项,用内点法的泛函形式;反之,采用外点法的泛函形式。混合法兼备了内点法和外点法两种功能,它可以根据初始点的具体况,进行自动排项。

MATLAB代码

本质上混合法是内点惩罚函数法与外点惩罚函数法的结合,个人认为内点法、外点法、混合法三种方法编写其中任何一种后,编写其他两种就十分简单了,混合法代码附在下方,程序运行结果会比较偏向与外点法单独运行的结果,即内点惩罚函数所起作用较小,个人也在有关内点惩罚法的博文中说了这个问题,暂时还未解决,如果解决了问题会立即更新博文。
内点惩罚函数法:
外点惩罚函数法:

MATLAB代码:

%% 能运行出结果,但是感觉整个函数还是外点法在起作用,最终结果并不满足约束条件
clear all;clc
syms x1 x2 x; 
f=x1^2+x2^2-x1*x2-10*x1-4*x2+60;%原函数
g1=x1-6;g2=x2-8;g3=x1+x2-11;%约束条件转换函数
e1=0.001;%梯度法最优值收敛精度
e2=0.001;%混合法收敛精度
D=1;%差值
k=1;
A(k)=11;B(k)=11;%A,B分别记录x1,x2点,初始点为[0,0]
r(k)=1;a=2;%r为惩罚因子,a为递增系数
%% 循环
while  D>e2 %罚因子迭代收敛条件
    x1=A(k);x2=B(k);
%判断点在不在可行域内,来选择外点惩罚函数
if x1-6>0
    u1=1;
else
    u1=0;
end
if x2-8>0
    u2=1;
else
   u2=0;
end
if x1+x2-11>0
    u3=1;
else
    u3=0;
end
%约束问题转换后的新目标函数
F=f+r(k)*u1*g1^2+r(k)*u2*g2^2+r(k)*u3*g3^2-1/r(k)*(log10(-g1)+log10(-g2)+log10(-g3));
%单纯形法求F的最优解xr
minx=minfunction(F,x1,x2,e1);
A(k+1)=minx(1,1);B(k+1)=minx(2,1);
D=double(sqrt((A(k+1)-A(k))^2+(B(k+1)-B(k))^2));
r(k+1)=a*r(k);
k=k+1;
end
A(k)
B(k)
double(subs(f))