用粒子群算法 求解带约束的问题。适应度函数怎么来写? 引入罚函数的目标函数,罚因子怎么来选取变化?
matlab编程。多个约束条件怎么处理?引入罚函数的适应度函数怎么编程实现?回答满意有加分求高手指点!谢谢...
matlab 编程。多个约束条件怎么处理?引入罚函数的 适应度函数 怎么编程实现?
回答满意 有加分 求高手指点!谢谢 展开
回答满意 有加分 求高手指点!谢谢 展开
展开全部
等了这么长时间也没看见有人回答,建议楼主还是多去看看论文,有一些论文里讲了用粒子群求解多约束的问题
追问
呵呵,谢谢。遇到一些问题,论文里不透露。再看看吧
追答
我也在用粒子群,不过还不是多约束的,帮不了你了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我用的外罚函数法,修改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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询