概述
matlab运行Shubert测试函数一些的报错信息及解决办法
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('解的变化','种群均值的变化');
最后
以上就是大胆夏天为你收集整理的matlab运行Shubert测试函数一些的报错信息及解决办法的全部内容,希望文章能够帮你解决matlab运行Shubert测试函数一些的报错信息及解决办法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复