简单的多目标遗传算法实现

function MultiGA()

%% 运行此程序之前先安装谢尔菲德遗传算法工具箱。
%% 遗传算法求解多目标优化案例
%% 将原多目标函数改写为f1=(x^2+y^2)/4;f2=x(1-y)+10;
% 运用线性叠加法,F=a*f1(x)+b*f2(x)  ,a+b=1
% 总目标函数改写为  f=0.6*(x^2+y^2)/4+0.4*(x*(1-y)+10);  
popse=100;  % 种群数目
maxgen=50;  % 最大迭代次数
preci=20;   % 编码长度
gap=0.95;   % 代沟大小
px=0.7;     % 交叉概率
pm=0.01;    %变异概率
lbx=1;      % 变量下界
lby=1;
ubx=4;      % 变量上界
uby=2;
trace=zeros(3,maxgen);  % 定义寻优结果的初始值
FieldD=[preci preci;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; % 区域描述器
chrom=crtbp(popse,preci*2);  % 创建随机种群
% 优化
gen=0;
pop=bs2rv(chrom,FieldD);    % 进制转换
X=pop(:,1);Y=pop(:,2);
objv=0.15*(X.^2+Y.^2)+0.4*(X.*(1-Y)+10);  % 目标函数
while gen < maxgen
    fitnv=ranking(-objv);
    selch=select('sus',chrom,fitnv,gap);    % 选择 ‘sus’表示为随机遍历抽样
    selch=recombin('xovmp',selch,px);       % 重组  ‘xovmp’表示多点交叉
    selch=mut(selch,pm);
    pop=bs2rv(selch,FieldD);                 % 子代个体进行进制转换
    X=pop(:,1);Y=pop(:,2);
    objvsel=0.15*(X.^2+Y.^2)+0.4*(X.*(1-Y)+10);
    [chrom,objv]=reins(chrom,selch,1,1,objv,objvsel);
    pop=bs2rv(chrom,FieldD);
    gen=gen+1;
    [Y,I]=max(objv);
    trace(1:2,gen)=pop(I,:);
    trace(3,gen)=Y;
end
%% 画出求解结果
figure(1)
plot3(trace(1,:),trace(2,:),trace(3,:),'b');  % 画出每代最优点
xlabel('x')
ylabel('y')
zlabel('f')
figure(2)
plot(1:maxgen,trace(3,:));  
xlabel('迭代次数')
ylabel('最优解')
bestz=trace(3,end);
bestX=trace(1,end);
bestY=trace(2,end);
fprintf(['最优解:\n X=',num2str(bestX),'\n Y=',num2str(bestY),'\n z=',num2str(bestz)])

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值