Matlab遗传算法(一)

1. 安装matlab 2010

2.下载gatbx(Sheffield的遗传算法工具箱,http://www.shef.ac.uk/acse/research/ecrg/gat.html

3. 解压至matlab 安装目录下的toolbox中

4. 在matlab 里 file ->Set Path 中添加刚才的解压目录,或者在.m中用addpath也可

5.  配置完成,配合《matlab遗传算法工具箱及应用》,Shellield官方的相应手册(manual.pdf,实际上左边那本书基本就是这个手册的翻译),《Matlab 从入门到精通》(周建兴),《matlab 常用函数》(.doc) 等使用

来个简单的例子,代码来自《matlab遗传算法工具箱及应用》,本人修改完善注释

figure(1);
fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);   %画出函数曲线
NIND=40;        %个体数目(Number of individuals)
MAXGEN=25;      %最大遗传代数(Maximum number of generations)
PRECI=20;       %变量的二进制位数(Precision of variables)
GGAP=0.9;       %代沟(Generation gap),可选,配合select使用,即生成length(SelCh) = length(Chrom)*0.9;
trace=zeros(2, MAXGEN);                        %寻优结果的初始值, '0'矩阵
FieldD=[20;-1;2;1;0;1;1];                      %区域描述器(Build field descriptor)
Chrom=crtbp(NIND, PRECI);                      %初始种群
gen=0;                                         %代计数器
variable=bs2rv(Chrom, FieldD);                 %计算初始种群的十进制转换
ObjV=variable.*sin(10*pi*variable)+2.0;        %计算目标函数值,Object Value
while gen<MAXGEN
   FitnV=ranking(-ObjV);                                  %基于排序的分配适应度值(Assign fitness values)         
   SelCh=select('sus', Chrom, FitnV, GGAP);               %选择, Selected Children
   SelCh=recombin('xovsp', SelCh, 0.7);                   %重组
   SelCh=mut(SelCh);                                      %变异
   variable=bs2rv(SelCh, FieldD);                         %子代个体的十进制转换
   ObjVSel=variable.*sin(10*pi*variable)+2.0;             %计算子代的目标函数值
   [Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); %重插入子代的新种群, 同时生成了Chrom和ObjV两个矩阵
   variable=bs2rv(Chrom, FieldD);                         %转换为十进制,表现型
   gen=gen+1;                                             %代计数器增加
   %输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号
   [Y, I]=max(ObjV);hold on;                              %hold on在exsiting上画图,不清空原有的图
   plot(variable(I), Y, 'bo');                            %每一代最优解(1个)画于图上
   trace(1, gen)=max(ObjV);                               %遗传算法性能跟踪
   trace(2, gen)=sum(ObjV)/length(ObjV);
end
variable=bs2rv(Chrom, FieldD);                            %最优个体的十进制转换
hold on, grid;
plot(variable,ObjV,'b*');
figure(2);
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid
legend('解的变化','种群均值的变化')                         %legend:图注 这函数名起得霸气
    原文作者:遗传算法
    原文地址: https://blog.csdn.net/majestyhao/article/details/7540069
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞