赞
踩
1、将Shubert函数单独放在一个m文件中
2、
将剩余的代码(代码我会放在下面)
添加
%clear
%close all
%clc
3、
将rep改为repmat
可能还会有以下问题:
问题:
或以下这种报错:
解决办法:我们需要下载一个gatbx的工具包
1、下载gatbx工具包:[参考:gatbx工具包下载]
(https://blog.csdn.net/qq_33353186/article/details/79329370)
2、解压、安装:
把下载的gatbx工具箱压缩包,解压到MATLAB安装目录下toolbox路径下
3、添加到路径
4、重新运行一遍,即可运行成功
运行图:
50次迭代:
代码及代码讲解:
第一个m文件:
function z = Shubert(x,y);
z=((1*cos((1+1)*x+1))+(2*cos((2+1)*x+2))+(3*cos((3+1)*x+3))+...
(4*cos((4+1)*x+4))+(5*cos((5+1)*x+5))+(1*cos((1+1)*y+1))+...
(2*cos((2+1)*y+2))+(3*cos((3+1)*y+3))+(4*cos((4+1)*y+4))+(5*cos((5+1)*y+5)));
第二个m文件:
%clear %close all %clc [x1,x2]=meshgrid(-10:.1:10); figure(1); mesh(x1,x2,Shubert(x1,x2)); %画出Shubert函数图像 %定义遗传算法参数 NIND = 40; % 个体数目(Number of individuals) MAXGEN = 50; % 最大遗传代数(Maximum number of generations) NVAR = 2; % 变量数目 PRECI = 25; % 变量的二进制位数(Precision of variables) GGAP = 0.9; % 代沟(Generation gap) %建立区域描述器(Build field desciptor) FieldD = [repmat([PRECI],[1,NVAR]);repmat([-3;3],[1,NVAR]);repmat([1;0;1;1],[1,NVAR])]; Chrom = crtbp(NIND,NVAR*PRECI); % 创建初始种群 gen = 0; trace = zeros(MAXGEN,2); % 遗传算法性能跟踪初始值 x = bs2rv(Chrom,FieldD); % 初始种群十进制转化 ObjV = Shubert(x(:,1),x(:,2)); % 计算初始种群的目标函数值 while gen < MAXGEN, FitnV = ranking(ObjV); % 分配适应度值 SelCh = select('sus',Chrom,FitnV,GGAP); % 选择 SelCh = recombin('xovsp',SelCh,0.7); % 重组 SelCh = mut(SelCh); % 变异 x = bs2rv(SelCh,FieldD); % 子代十进制转化 ObjVSel = Shubert(x(:,1),x(:,2)); % 重插入 [Chrom,ObjV] = reins(Chrom,SelCh,1,1,ObjV,ObjVSel); gen = gen + 1; [Y,I] = min(ObjVSel); Y,bs2rv(Chrom(I,:),FieldD); %输出最优解及其对应的自变量值 trace(gen,1) = min(ObjV) trace(gen,2) = sum(ObjV)/length(ObjV); %遗传算法性能跟踪 if(gen == 50) %迭代数为50时,画出目标函数图 figure(2); plot(ObjV);hold on; plot(ObjV,'b*');grid; end end figure(3);clf; plot(trace(:,1));hold on; plot(trace(:,2),'-.');grid; legend('解的变化','种群均值的变化');
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。