首先是单个变量函数的最小值
% 学习遗传算法,第一个案例:用遗传算法工具箱计算一元函数最小值
% 2021.5.30
clc
clear
figure;
hold on
%定义自变量的范围
lb = 1; ub = 2;
ezplot('sin(10*pi*X)/X',[lb,ub]);
xlabel('自变量/X')
ylabel('函数值/Y')
%%定义遗传算法参数
NIND = 40 %种群大小
MAXGEN = 20 %最大遗传代数
PRECI = 20 %个体长度
GGAP = 0.95 %代沟
px = 0.7 %交叉概率
pm = 0.01 %变异概率
%trace用来记录每一次的结果
trace = zeros(2,MAXGEN)
%创建离散种群
Chrom = crtbp(NIND,PRECI)
%
FieldD = [PRECI;lb;ub;1;0;1;1]
%%优化
gen = 0
X = bs2rv(Chrom,FieldD)
ObjV = sin(10*pi*X)./X
while gen<MAXGEN
FitnV = ranking(ObjV) %分配适应度
SelCh = select('sus',Chrom,FitnV,GGAP) %选择
SelCh = recombin('xovsp',SelCh,px) %重组
SelCh = mut(SelCh,pm) %变异
X = bs2rv(SelCh,FieldD) %子代个体的十进制转换
ObjVSel = sin(10*pi*X)./X
[Chrom,ObjV] = reins(Chrom,SelCh,1,1,ObjV,ObjVSel)
X = bs2rv(Chrom,FieldD)
gen = gen+1;
[Y,I] = min(ObjV)
trace(1,gen) = X(I)
trace(2,gen) = Y
end
plot(trace(1,:),trace(2,:),'bo');
grid on
plot(X,ObjV,'b*');
figure
plot(1:MAXGEN,trace(2,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
bestY = trace(2,end)
bestX = trace(1,end)
接着是多变量函数的最大值
% 学习遗传算法,第二个案例,用遗传工具箱计算二元函数的最大值
% 2021.5.31
% 王东方
clc
clear
close all
%定义自变量的范围x y
low_x = -2;
up_x = 2;
low_y = -2;
up_y = 2;
ezmesh('x*cos(2*pi*y)+y*sin(2*pi*x)',[low_x,up_x,low_y,up_y],100);
hold on
%%定义遗传算法参数
NIND = 40 %种群大小
MAXGEN = 20 %最大遗传代数
PRECI = 50 %个体长度
GGAP = 0.95 %代沟
px = 0.7 %交叉概率
pm = 0.01 %变异概率
trace = zeros(3,MAXGEN);
%创建离散种群
Chrom = crtbp(NIND,PRECI*2)
FieldD = [PRECI PRECI;low_x low_y;up_x up_y;1 1;0 0;1 1;1 1];
%%优化
gen = 0
XY = bs2rv(Chrom,FieldD)
X = XY(:,1);
Y = XY(:,2);
ObjV = Y.*sin(2*pi*X)+X.*cos(2*pi*Y)
while gen<MAXGEN
FitnV = ranking(-ObjV) %分配适应度
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] = max(ObjV)
trace(1:2,gen) = XY(I,:)
trace(3,gen) = Y
end
plot3(trace(1,:),trace(2,:),trace(3,:),'bo');
grid on
plot3(XY(:,1),XY(:,2),ObjV,'b*');
figure
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
bestZ = trace(3,end)
bestY = trace(2,end)
bestX = trace(1,end)
可以对比学习一下,有时间我再写一下心得,这个是跟着MATLAB只能算法30个案例分析的代码敲的