MATLAB遗传算法例子一

来源:互联网 发布:如何整理mac里的照片 编辑:程序博客网 时间:2024/05/19 17:50

本文代码基于谢菲尔德大学遗传算法工具箱。

问题:求这里写图片描述在0~4范围内的最大值

figure(1);% fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]); %画出函数曲线fplot('-variable.*(variable - 4)',[0,5]);   %画出函数曲线%定义遗传算法参数NIND=40;        %个体数目(Number of individuals)MAXGEN=25;      %最大遗传代数(Maximum number of generations)PRECI=20;       %变量的二进制位数(Precision of variables)GGAP=0.9;       %代沟(Generation gap)trace=zeros(2, MAXGEN);                        %寻优结果的初始值FieldD=[20;0;5;1;0;1;1];                      %区域描述器(Build field descriptor)表示染色体个体到实际的数字的映射关系Chrom=crtbp(NIND, PRECI);                      %初始种群gen=0;                                         %代计数器variable=bs2rv(Chrom, FieldD);             %计算初始种群的十进制转换ObjV=-variable.*(variable - 4);        %计算目标函数值while gen<MAXGEN   FitnV=ranking(-ObjV);     %分配适应度值(Assign fitness values)            SelCh=select('sus', Chrom, FitnV, GGAP);               %选择   SelCh=recombin('xovsp', SelCh, 0.7);                   %重组   SelCh=mut(SelCh);                                      %变异   variable=bs2rv(SelCh, FieldD); %子代个体的十进制转换   ObjVSel=-variable.*(variable - 4);%计算子代的目标函数值   [Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);                                          %重插入子代的新种群   variable=bs2rv(Chrom, FieldD);   gen=gen+1;                            %代计数器增加   %输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号   [Y, I]=max(ObjV);hold on;   plot(variable(I), Y, 'bo');   trace(1, gen)=max(ObjV);             %遗传算法性能跟踪   trace(2, gen)=sum(ObjV)/length(ObjV);endvariable=bs2rv(Chrom, FieldD);            %最优个体的十进制转换hold on, grid;plot(variable,ObjV,'b*');figure(2);plot(trace(1,:));hold on;plot(trace(2,:),'-.');gridlegend('解的变化','种群均值的变化')

步骤:

  1. 初始化种群
  2. 分配适应度值FitnV
  3. 选择、重组、变异
  4. 子代插入父代形成新种群
  5. 回到2,循环直至最大代数
  6. 得到最优种群,即最优解

本文代码大部分来自《MATLAB_遗传算法工具箱与应用》雷英杰 一书

0 0