遗传算法的过程在这里先不介绍了,可能在接下来的几篇文章会介绍,这里介绍些实用的。
(1)Sheffield遗传算法工具箱的安装
我共享了下修改过文件名和后缀名的原版工具箱,地址为:http://pan.baidu.com/s/1inVKE
安装方法:
将整个文件夹复制到matlab安装文件夹中的toolbox文件夹
例如:C:\Program Files\MATLAB\R2013b\toolbox文件夹。
然后在Command Window里面输入:
str = [\'C:\Program Files\MATLAB\R2013b\toolbox\gatbx\']
addpath(str)
可能有些同学出现过这个问题,
Undefined function or method \'crtbp\' for input arguments of type \'double\'
或者是:
Cannot find an exact (case-sensitive) match for \'crtbp.m\'
The closest match is C:\Program Files\MATLAB\R2012a\toolbox\gatbx\CRTBP.M
To change the file extension, cd to the file\'s folder, type:
movefile CRTBP.M CRTBP.m_bad; movefile CRTBP.m_bad CRTBP.m
and then cd back.
这是因为新旧Matlab版本对于M文件的文件名要求不尽相同,将其全部改为小写文件名和文件后缀名即可。
(2)应用实例(1)——单变量函数求最值
类似模板的东西,求解此函数最大值:
有如下代码:
%% Do Some Cleaning clc clear all; close all; %% Set the initial parameters lb = 1; ub = 2;%x belongs to [1,2] %% Plot figure(1); hold on; ezplot(\'sin(10*pi*X)/X\',[lb,ub]); xlabel(\'x/X\') ylabel(\'y/Y\') %% Define the parameters of GA NIND = 40;%size of the group MAXGEN = 20;%max generations PRECI = 20;%length of a individual GGAP = 0.95;%gap px = 0.7;%the possibility of cross production pm = 0.1;%the possibility of mutation trace = zeros(2,MAXGEN);%init value of algorithm寻优函数 FieldD = [PRECI;lb;ub;1;0;1;1];%区域描述器 Chrom = crtbp(NIND,PRECI);%creat random discrete group %% Optimizations gen = 0;%counter of generations X = bs2rv(Chrom,FieldD);%bin to dec ObjV = sin(10 * pi * X) ./ X;%cal the f(x) while gen < MAXGEN FitnV = ranking(ObjV);%allocate the adaptness SelCh = select(\'sus\',Chrom,FitnV,GGAP);%select SelCh = recombin(\'xovsp\',SelCh,px);%recombine SelCh = mut(SelCh, pm);%mutate X = bs2rv(SelCh,FieldD);%to dec ObjVSel = sin(10 * pi * X)./ X;%cal the next-gen\'s target f(x) [Chrom, ObjV] = reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);%reinsert them to father-gen X = bs2rv(Chrom, FieldD); gen = gen + 1;%counter+=1 %get every gen\'s answers and it\'s nums, Y stant for best f(x), I for %nums; [Y I] = min(ObjV); trace(1,gen) = X(I); trace(2,gen) = Y; end %% Plot plot(trace(1,:),trace(2,:),\'bo\');%plot every gen\'s answer grid on; plot(X,ObjV,\'b*\'); hold off %% Plot the evolution figure(2); plot(1:MAXGEN,trace(2,:)); grid on xlabel(\'count of generations\') ylabel(\'answer\') title(\'procedure\') bestY = trace(2,end) bestX = trace(1,end)
运行结果:
(3)应用实例(2)——双变量函数求最值
那么有如下代码:
%% Do Some Cleaning clc clear all; close all; %% Set the initial parameters lbx = -2; ubx = 2;%x belongs to [-2,2] lby = -2; uby = 2;%y belongs to [-2,2] %% Plot figure(1); ezmesh(\'y*sin(2*pi*x) + x*cos(2*pi*y)\',[lbx,ubx,lby,uby],50); xlabel(\'x/X\') ylabel(\'y/Y\') hold on; %% Define the parameters of GA NIND = 40;%size of the group MAXGEN = 20;%max generations PRECI = 20;%length of a individual GGAP = 0.95;%gap px = 0.7;%the possibility of cross production pm = 0.01;%the possibility of mutation trace = zeros(3,MAXGEN);%init value of algorithm寻优函数 FieldD = [PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1];%Field discriber Chrom = crtbp(NIND,PRECI*2);%creat random discrete group %% Optimizations gen = 0;%counter of generations XY = bs2rv(Chrom,FieldD);%bin to dec X = XY(:,1); Y = XY(:,2); ObjV = Y.*sin(2*pi*X) + X.*cos(2*pi*Y);%cal the f(x,y) while gen < MAXGEN FitnV = ranking(-ObjV);%allocate the adaptness SelCh = select(\'sus\',Chrom,FitnV,GGAP);%select SelCh = recombin(\'xovsp\',SelCh,px);%recombine SelCh = mut(SelCh, pm);%mutate XY = bs2rv(SelCh,FieldD);%bin to dec X = XY(:,1); Y = XY(:,2); ObjVSel = Y.*sin(2*pi*X) + X.*cos(2*pi*Y);%cal the next-gen\'s target f(x) [Chrom, ObjV] = reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);%reinsert them to father-gen XY = bs2rv(Chrom,FieldD); gen = gen + 1;%counter+=1 %get every gen\'s answers and it\'s nums, Y stant for best f(x), I for %nums; [Y, I] = max(ObjV); trace(1:2,gen) = XY(I,:); trace(3,gen) = Y; end %% Plot plot3(trace(1,:),trace(2,:),trace(3,:),\'bo\');%plot every gen\'s answer grid on; plot3(XY(:,1),XY(:,2),ObjV,\'b*\'); hold off %% Plot the evolution figure(2); plot(1:MAXGEN,trace(3,:)); grid on xlabel(\'count of generations\') ylabel(\'answer\') title(\'procedure\') bestX = trace(1,end) bestY = trace(2,end) bestZ = trace(3,end)
运行结果:
(4)应用实例(3)——遗传算法接力优化(采用系统GAtool工具箱)
优化此函数:
第一个文件(主文件):
%主程序:本程序采用遗传算法接力进化,
%将上次进化结束后得到的最终种群作为下次输入的初始种群
clc;
close all;
clear all;
%进化的代数
T=100;
optionsOrigin=gaoptimset(\'Generations\',T/2);
[x,fval,reason,output,finnal_pop]=ga(@ff,2,optionsOrigin);
%进行第二次接力进化
options1=gaoptimset(\'Generations\',T/2,\'InitialPopulation\',finnal_pop,...
\'PlotFcns\',@gaplotbestf);
[x,fval,reason,output,finnal_pop]=ga(@ff,2,options1);
Bestx=x
BestFval=fval
评价函数文件,与主文件一起保存,名字为ff.m
%子函数:适应度函数同时也是目标函数,函数存储名称为ch14_2f.m
function f=ff(x)
g1=1.5+x(1)*x(2)-x(1)-x(2);
g2=-x(1)*x(2);
if(g1>0||g2>10)
f=100;
else
f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
end
程序结果:
至此,第一部分结束,下一篇将介绍遗传算法的基本内容。
请发表评论