遗传算法谢菲尔德大学 遗传算法谢菲尔德大学工具箱第一个例子,一点点方便理解。。。
%% 简单一元函数优化
% f(x)=sin(10*pi*x)./x;1<=x<=2;求最小值
% 思想,种群使用二进制来代表数字的大小,。。。。
%1 清除之前变量工作区内容
clc;
clear;
close all;
%2 画出函数图使用fplot函数;格式fplot(@x 公式,区间,'图像属性');
lb=1;ub=2;
figure(1);
hold on;
fplot(@(x) sin(10*pi*x)./x,[lb,ub],'Linewidth',2);
xlabel('自变量/X');
ylabel('函数值/Y');
% 定义遗传算法参数:种群大小,最大遗传代数,个体长度,代沟,
Chrom_Num=40;
MAXGEN=20;
indiviLen=20;
GGAP=0.95;
%交叉概率,变异概率,寻优结果的初始值,区域描述器,初始化种群大小,初始化代数gen
px=0.7;
pm=0.01;
trace=zeros(2,MAXGEN);
FieldD=[indiviLen;lb;ub;1;0;1;1];
Chrom=crtbp(Chrom_Num,indiviLen);
gen=0;
% 优化:确定当前随机种群中各个个体的目标函数值;
x=bs2rv(Chrom,FieldD);
ObjV=sin(10*pi*x)./x;
% 进行迭代循环,将目标值按照规则分配适应度值
while gen<MAXGEN
FitV=ranking(ObjV);%ranking 为工具箱内置的函数
% 根据适应度值进行选择,交叉重组,变异,重新插入父代,得到新种群
SelCh=select('sus',Chrom,FitV,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(2);
plot(1:MAXGEN,trace(2,:));
grid on;
title('进化过程');
bestY=trace(2,end);
bestX=trace(1,end);
fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n']);
% 输出最优解
这里是引用 [1] 郁磊,MATLAB智能算法30个案例分析(第2版) P12-13.
|