用粒子群算法 求解带约束的问题。适应度函数怎么来写? 引入罚函数的目标函数,罚因子怎么来选取变化?

2024-12-20 05:43:32
推荐回答(2个)
回答1:

等了这么长时间也没看见有人回答,建议楼主还是多去看看论文,有一些论文里讲了用粒子群求解多约束的问题

回答2:

我用的外罚函数法,修改fitness函数,在可行域之外的施以惩罚,望采纳加分,我也研究好久的,成果不易
function F= fitness(x)
if -2*x(1)-x(2)+10>=0 && x(1)-5*x(2)+6>=0&&3-3*x(1)+2*x(2)>=0
F=-12*x(1)-9*x(2);
else if -2*x(1)-x(2)+10<0 && x(1)-5*x(2)+6>=0&&3-3*x(1)+2*x(2)>=0
deta=100;
F=-12*x(1)-9*x(2)+deta*(-2*x(1)-x(2)+10)^2;
else if -2*x(1)-x(2)+10>=0 && x(1)-5*x(2)+6<0&&3-3*x(1)+2*x(2)>=0
deta=100;
F=-12*x(1)-9*x(2)+deta*(x(1)-5*x(2)+6)^2;
else if -2*x(1)-x(2)+10>=0 && x(1)-5*x(2)+6>=0&&3-3*x(1)+2*x(2)<0
deta=100;
F=-12*x(1)-9*x(2)+deta*(3-3*x(1)+2*x(2))^2;
else if -2*x(1)-x(2)+10<0 && x(1)-5*x(2)+6<0&&3-3*x(1)+2*x(2)>=0
deta=100;
F=-12*x(1)-9*x(2)+deta*((-2*x(1)-x(2)+10)^2+(x(1)-5*x(2)+6)^2);
else if -2*x(1)-x(2)+10<0 && x(1)-5*x(2)+6>=0&&3-3*x(1)+2*x(2)<0
deta=100;
F=-12*x(1)-9*x(2)+deta*((-2*x(1)-x(2)+10)^2+(3-3*x(1)+2*x(2))^2);
else if -2*x(1)-x(2)+10>=0 && x(1)-5*x(2)+6<0&&3-3*x(1)+2*x(2)<0
deta=100;
F=-12*x(1)-9*x(2)+deta*((x(1)-5*x(2)+6)^2+(3-3*x(1)+2*x(2))^2);
else if -2*x(1)-x(2)+10<0 && x(1)-5*x(2)+6<0&&3-3*x(1)+2*x(2)<0
deta=100;
F=-12*x(1)-9*x(2)+deta*((-2*x(1)-x(2)+10)^2+(x(1)-5*x(2)+6)^2+(3-3*x(1)+2*x(2))^2);
end
end
end
end
end
end
end
end