%个体数目
%最大遗传代数
%改进前的代码:
clc
clear all
close all
%% 画出函数图
figure(1);
lbx=-2;ubx=2; %函数自变量x范围【-2,2】
lby=-2;uby=2; %函数自变量y范围【-2,2】
ezmesh('y*sin(2*pi*x)+x*cos(2*pi*y)',[lbx,ubx,lby,uby],50);
%画出函数曲线
hold on;
%% 定义遗传算法参数
NIND=40;
MAXGEN=100;
PRECI=20;
GGAP=0.95;
% px=0.7;
%pm=0.01;
trace=zeros(3,MAXGEN);
值
FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1
1];
Chrom=crtbp(NIND,PRECI*2);
%% 优化
gen=0;
XY=bs2rv(Chrom,FieldD);
转换
X=XY(:,1);Y=XY(:,2);
ObjV=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);
%变量的二进制位数
%代沟
交叉概率
变异概率
%区域描述器
%寻优结果的初始
%初始种群
%代计数器
%计算初始种群的十进制
%计算目标函数值
交叉概率
% 分配适
% FitnV=ranking(-ObjV);
while gen
for i = 1: length(FitnV)-1
if(FitnV(i)>1)
px = 0.1;
elseif (FitnV(i)>0.7 & FitnV<1)
px = 0.6;
elseif (FitnV(i)<0.7)
px = 0.85;
end
end
for i = 1: length(FitnV)-1
if(FitnV(i)>1)
pm = 0.0001;
elseif (FitnV(i)>0.7 & FitnV<1)
pm = 0.01;
elseif (FitnV(i)<0.7)
pm = 0.08;
end
end
SelCh=select('sus',Chrom,FitnV,GGAP);
SelCh=recombin('xovsp',SelCh,px);
SelCh=mut(SelCh,pm);
XY=bs2rv(SelCh,FieldD);
%选择
%重组
%变异
%子代个体的十进制转
换
X=XY(:,1);Y=XY(:,2);
ObjVSel=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);
%计算子
代的目标函数值
[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入
子代到父代,得到新种群
XY=bs2rv(Chrom,FieldD);
gen=gen+1;
计数器增加
%代
%获取每代的最优解及其序号,Y为最优解,I为个体的序号
[Y,I]=max(ObjV);
trace(1:2,gen)=XY(I,:);
%记下每代的
最优值
trace(3,gen)=Y;
%记下每代的
最优值
end
plot3(trace(1,:),trace(2,:),trace(3,:),'*');
%画出每代的最优点
grid on;
plot3(XY(:,1),XY(:,2),ObjV,'bp'); %画出最后一代的种群
hold off
%% 画进化图
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestZ=trace(3,end);
bestX=trace(1,end);
bestY=trace(2,end);
fprintf(['最优
解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(
bestZ),'\n'])
%改进后的代码:
clc
clear all
close all
%% 画出函数图
figure(1);
lbx=-2;ubx=2; %函数自变量x范围【-2,2】
lby=-2;uby=2; %函数自变量y范围【-2,2】
ezmesh('y*sin(2*pi*x)+x*cos(2*pi*y)',[lbx,ubx,lby,uby],50);
%画出函数曲线
hold on;
%% 定义遗传算法参数
%寻优结果的初始
%初始种群
%代计数器
%计算初始种群的十进制
%个体数目
交叉概率
变异概率
%最大遗传代数
%变量的二进制位数
%代沟
NIND=40;
MAXGEN=100;
PRECI=20;
GGAP=0.95;
% px=0.7;
%pm=0.01;
trace=zeros(3,MAXGEN);
值
FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1
1];
Chrom=crtbp(NIND,PRECI*2);
%% 优化
gen=0;
XY=bs2rv(Chrom,FieldD);
转换
X=XY(:,1);Y=XY(:,2);
ObjV=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);
%区域描述器
%计算目标函数值
% 分配适
% FitnV=ranking(-ObjV);
交叉概率
while gen1)
px = 0.1;
elseif (FitnV(i)>0.7 & FitnV<1)
px = 0.6;
elseif (FitnV(i)<0.7)
px = 0.85;
end
end
for i = 1: length(FitnV)-1
if(FitnV(i)>1)
pm = 0.0001;
elseif (FitnV(i)>0.7 & FitnV<1)
pm = 0.01;
elseif (FitnV(i)<0.7)
pm = 0.08;
end
end
SelCh=select('sus',Chrom,FitnV,GGAP);
SelCh=recombin('xovsp',SelCh,px);
SelCh=mut(SelCh,pm);
XY=bs2rv(SelCh,FieldD);
%选择
%重组
%变异
%子代个体的十进制转
换
X=XY(:,1);Y=XY(:,2);
ObjVSel=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);
%计算子
代的目标函数值
[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入
子代到父代,得到新种群
XY=bs2rv(Chrom,FieldD);
gen=gen+1;
计数器增加
%代
%获取每代的最优解及其序号,Y为最优解,I为个体的序号
[Y,I]=max(ObjV);
trace(1:2,gen)=XY(I,:);
%记下每代的
最优值
trace(3,gen)=Y;
最优值
end
%记下每代的
plot3(trace(1,:),trace(2,:),trace(3,:),'*');
%画出每代的最优点
grid on;
plot3(XY(:,1),XY(:,2),ObjV,'bp'); %画出最后一代的种群
hold off
%% 画进化图
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestZ=trace(3,end);
bestX=trace(1,end);
bestY=trace(2,end);
fprintf(['最优
解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(
bestZ),'\n'])