多目标遗传算法优化

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)])

    原文作者:遗传算法
    原文地址: https://blog.csdn.net/jahn1130/article/details/68931396
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞