700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 多目标遗传算法优化

多目标遗传算法优化

时间:2019-09-14 23:37:54

相关推荐

多目标遗传算法优化

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。