MATLAB遗传算法工具箱的函数及实例

 

遗传算法(GA)是一种进化算法,是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

遗传算法把问题参数编码为染色体,利用层层迭代的方式进行选择、交叉以及变异等运算交换种群中染色体信息,最终生成符合优化目标的染色体。

本文将使用到Sheffield遗传算法工具箱。Sheffield遗传算法工具箱是由英国谢菲尔德大学开发的。该工具箱提供了大量的遗传算法应用到的m函数,为我们研究遗传算法提供了非常多的便捷。

我将在下面通过一个实例来介绍遗传算法的过程。下面的实例是利用遗传算法寻找一元函数的最小值。

%% 画出函数图figure(1);hold on;lb=1;ub=2;  %函数自变量范围[1,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=zeros(2,MAXGEN);         %寻优结果的初始值FieldD=[PRECI;lb;ub;1;0;1;1];  %区域描述器Chrom=crtbp(NIND,PRECI);       %初始种群%% 优化算法(主要部分)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为个体的序号   [Y,I]=min(ObjV);   trace(1,gen)=X(I);                            %记下每代的最优值   trace(2,gen)=Y;                               %记下每代的最优值endplot(trace(1,:),trace(2,:),'bo');  %画出每代的最优点grid on;plot(X,ObjV,'b*');   %画出最后一代的种群hold off%% 画进化图figure(2);plot(1:MAXGEN,trace(2,:));grid onxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestY=trace(2,end);bestX=trace(1,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])

由定义遗传算法参数部分可知,我们将生成的种群包含40个个体,每个个体长度为20,最大遗传迭代次数为20次。代沟为0.95,交叉概率为0.7,变异概率为0.01。

优化部分为遗传算法的核心内容,其中也大量使用谢菲尔德工具箱中提供的m函数,绿色标记即为所使用函数。

  1. crtbp函数

    功能:该函数功能为创建初始离散随机种群。

    一般调用格式:Chrom=crtbp(种群个体数,个体长度)

  2. bs2rv函数

    功能:二进制到十进制的转换

    一般调用格式:Phen=bs2rv(Chrom,Field)

  3. ranking函数

    功能:基于排序的适应度分配

    一般调用格式:FitnV=ranking(ObjV)

  4. selcet函数

    功能:从种群中选择个体

    一般调用格式:SelCh=select('sus',Chrom,FitnV,GGAP)

  5. recombin函数

    功能:重组个体

    一般调用格式:SelCh=recombin('recdis',Chrom)

  6. mut函数

    功能:离散变异算子

    一般调用格式:SelcCh=mut(NewChrom,pm)

  7. reins函数

    功能:重插入子代到种群

    一般调用格式:Chrom=reins(Chrom,SelCh)

过程可表述为:初代种群通过分配适应度值进行淘汰选择,再进行重组,再进行变异而得到第二代种群,第二代种群重插入到初代种群而产生新种群。

注:假设数据为二进制,则在重组中每一列不会产生0或1个数的变化。而变异会使某种群个体中某一长度编码变化,即某几个元素由0变1或是由1变0,从而使0和1数量发生变化。重插入指后代种群中某几个种群直接取代了前代某几个种群,即发生某一行的全部替代。

运行上述代码后可得到结果为:取值点X=1.1497,最小值Y=-0.86977

 

该图中圈符号为每代最优解,星符号为优化20代后的种群分布。两者大部分集中在一个点,该点即为最优解。

该图为最优解的迭代过程。


需要源码请在文章下留言

 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值