我是靠谱客的博主 大胆夏天,最近开发中收集的这篇文章主要介绍matlab运行Shubert测试函数一些的报错信息及解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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次迭代: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测试函数一些的报错信息及解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部