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('解的变化','种群均值的变化');
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值