遗传算法的matlab实现

遗传算法是一种全局最优化算法,是运用了进化论优胜劣汰原理的随机化搜索方法。

前些日子,在进行毕业设计的相关研究中,我接触到了遗传算法,用其对一个五元非线性函数进行最优化搜索。仿真平台使用的是matlab,主要使用的是谢菲尔德大学的matlab遗传算法工具箱。

具体程序如下:

clc
clear all
close all
lbx=-1;ubx=1; %函数自变量x范围【-1,1】
lby=-1;uby=1; %函数自变量y范围【-1,1】
%% 定义遗传算法参数
NIND=50;        %个体数目
MAXGEN=50;      %最大遗传代数
PRECI=20;       %变量的二进制位数
GGAP=0.90;      %代沟
px=0.97;         %交叉概率
pm=0.001;        %变异概率
trace=zeros(6,MAXGEN);                        %寻优结果的初始值
FieldD=[PRECI PRECI PRECI PRECI PRECI;lbx lby lbx lbx lbx;ubx uby ubx ubx ubx;1 1 1 1 1;0 0 0 0 0;1 1 1 1 1;1 1 1 1 1];                      %区域描述器
Chrom=crtbp(NIND,PRECI*5);                      %初始种群
%% 优化
gen=0;                                  %代计数器
XY=bs2rv(Chrom,FieldD);                 %计算初始种群的十进制转换
d1=XY(:,1);
d2=XY(:,2);d3=XY(:,3);d4=XY(:,4);d5=XY(:,5);
ObjV=func(d1,d2,d3,d4,d5,NIND);       %计算目标函数值
while gen<MAXGEN
   FitnV=ranking(-ObjV);                              %分配适应度值
   SelCh=select('sus',Chrom,FitnV,GGAP);              %选择
   SelCh=recombin('xovsp',SelCh,px);                  %重组
   SelCh=mut(SelCh,pm);                               %变异
   XY=bs2rv(SelCh,FieldD);               %子代个体的十进制转换
   d1=XY(:,1);d2=XY(:,2);d3=XY(:,3);d4=XY(:,4);d5=XY(:,5);
   d1n=numel(d1);
   ObjVSel=func(d1,d2,d3,d4,d5,d1n);          %计算子代的目标函数值
   [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群
   XY=bs2rv(Chrom,FieldD);
   gen=gen+1                                             %代计数器增加
   %获取每代的最优解及其序号,Y为最优解,I为个体的序号
   [Y,I]=max(ObjV);
   trace(1:5,gen)=XY(I,:);                       %记下每代的最优值
   trace(6,gen)=Y;                               %记下每代的最优值
end
figure(2);
plot(1:MAXGEN,trace(6,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestc1=trace(1,end)
bestc2=trace(2,end)
bestc3=trace(3,end)
bestc4=trace(4,end)
bestc5=trace(5,end)
bestSIR=trace(6,end)

其中,func即为目标函数,可自行编辑。

最优解的进化曲线如下图:

《遗传算法的matlab实现》

    原文作者:遗传算法
    原文地址: https://blog.csdn.net/sxtygjy9000/article/details/73650568
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞