遗传算法以及matlab程序实现
话不多说,直接上程序,该程序为寻找目标函数的最大值,代码中所用到的matlab函数大多是基于谢菲尔德大学的遗传算法工具箱实现的,所以有小伙伴运行时出现函数问题,那就应该安装一个谢菲尔德大学的遗传算法工具箱,在我主页里有免费的谢菲尔德大学遗传算法工具箱,下面是代码部分:
%% 标准遗传算法SGAclearclcpc=0.7;pm=0.05;%定义遗传算法参数NIND=40; %个体数目MAXGEN=500;%最大遗传代数NVAR=2;%变量的维数PRECI=20; %变量的二进制位数GGAP=0.9; %代沟trace=zeros(MAXGEN,1);FieldD=[rep(PRECI,[1,NVAR]);[-3,4.1;12.1,5.8];rep([1;0;1;1],[1,NVAR])];Chrom=crtbp(NIND, NVAR*PRECI); %创建初始种群gen=0; %代计数器 maxY=0; %最优值ObjV=ObjectFunction(bs2rv(Chrom, FieldD));%计算初始种群个体的目标函数值while gen<MAXGEN %迭代FitnV=ranking(-ObjV); %分配适应度值(Assign fitness values)SelCh=select('rws', Chrom, FitnV, GGAP); %选择SelCh=recombin('xovsp', SelCh, pc); %重组SelCh=mut(SelCh,pm); %变异ObjVSel=ObjectFunction(bs2rv(SelCh, FieldD)); %计算子代目标函数值[Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); %重插入gen=gen+1; %代计数器增加if maxY<max(ObjV)maxY=max(ObjV);endtrace(gen,1)=maxY;% %[maxO,maxI]=max(ObjV);% %maxObjV(gen,:)=maxO;% %maxChrom(gen,:)=Chrom(maxI,:);end%% 进化过程图plot(1:gen,trace(:,1));% % 输出最优解[Y,I]=max(ObjV);X=bs2rv(Chrom, FieldD);disp(['最优值为:',num2str(Y)])disp(['对应的自变量取值:',num2str(X(I,:))])% % [Y,I]=max(maxObjV);% % X=bs2rv(maxChrom(I,:),FieldD);% % disp(['最优值为:',num2str(Y)])% % disp(['对应的自变量取值:',num2str(X)])
这是遗传算法的主体部分,还需要一个函数文件(使用该遗传算法进行寻优的函数)如下:
function obj=ObjectFunction(X)%% 待优化的目标函数% X的每行为一个个体col=size(X,1);for i=1:colobj(i,1)=21.5+X(i,1)*sin(4*pi*X(i,1))+X(i,2)*sin(20*pi*X(i,2));end%%测试函数% % col=size(X,1);% % for i=1:col% % obj(i,1)=21.5+X(i,1)*sin(4*pi*X(i,2))+X(i,2)*sin(20*pi*X(i,3));% % end
这里就可以实现用遗传算法寻找函数的最大值。
也可以子在此基础上进行改进,如寻找最小值,参数识别,以及与其他算法进行结合等等。