matlab遗传算法代码检查错误

主程序如下:%%基本遗传算法%%清空环境变量clcclear%%初始化遗传算法参数%初始化参数NIND=20;MAXGEN=100;NVAR=8;PRECI=1;GGAP... 主程序如下:

%% 基本遗传算法

%% 清空环境变量
clc
clear

%% 初始化遗传算法参数
%初始化参数
NIND=20;
MAXGEN=100;
NVAR=8;
PRECI=1;
GGAP=0.9;% 进化代数,即迭代次数
% 种群规模
%% 初始化种群计算适应度值
% 初始化种群
FieldD=[rep(PRECI,[1,NVAR]);rep([0;1],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI);
ObjV=fit(bs2rv(Chrom,FieldD));
gen=0;
while gen<MAXGEN
FitnV=ranking(ObjV);
SelCh=select('sus',Chrom,FitnV,GGAP);
SelCh=recombin('xovsp',SelCh,0.7);
SelCh=mut(SelCh,0.07);
ObjVSel=fit(bs2rv(SelCh,FieldD));
[Chrom ObjV]=rein(Chrom,SelCh,1,1,ObjV,ObjVSel);
gen=gen+1

%找最好的染色体
trace(gen,1)=min(ObjV);
trace(gen,2)=sum(ObjV)/length(ObjV);
end
plot(trace(:,1)); hold on;
plot(trace(:,2)); grid;
legend('average','bestfitness');
适应度函数如下:
function [fitness]=fit(x)
for i=1:20
i
%随机产生一个种群
if (x(i,6)*x(i,7)-x(i,8)*x(i,6))*(x(i,3)*x(i,2)-x(i,4)*x(i,1))==0
x(i,:)=unidrnd(2,1,8)-1;
end%染色体的适应度
end
a=x(:,1)+x(:,2)+x(:,3)+x(:,4);
b=x(:,5)+x(:,6)+x(:,7)+x(:,8);
for i=1:20
i
if a[i]=4
c=1;
else
c=0;
end
if b[i]=4
d=1;
else
d=0;
end
fitness(i)=c+d;
end
结果显示:
Warning: Divide by zero.
> In RANKING at 71
??? Error using ==> SELECT
Chrom and FitnV disagree
不知道该怎么修改了,求大神指点!我的遗传算法函数用的是英国设菲尔德大学的遗传算法工具箱
展开
 我来答
tianxiawulang
推荐于2016-10-07 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2597万
展开全部

发现的几处错误:

1、适应度函数里面if a[i]=4改为if a(i)==4,类似的还有if b[i]=4。不需要多解释了吧?一个是数组注意和C语言风格区别,另一个是判断相等的符号问题。

2、适应度函数应返回列向量,在fit函数最后加一句:fitness=fitness(:);

3、选择的结果是种群规模减小,不能使用固定的出示规模20,应把适应度函数里面两处循环for i=1:20改为for i=1:size(x,1)

4、主函数里面rein应为reins

 

代码写到一个M文件中:

function zd
%% 初始化遗传算法参数
%初始化参数
NIND=20;
MAXGEN=100;
NVAR=8;
PRECI=1;
GGAP=0.9;% 进化代数,即迭代次数
% 种群规模
%% 初始化种群计算适应度值
% 初始化种群
FieldD=[rep(PRECI,[1,NVAR]);rep([0;1],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI);
ObjV=fit(bs2rv(Chrom,FieldD));
gen=0;
while gen<MAXGEN
    FitnV=ranking(ObjV);
    SelCh=select('sus',Chrom,FitnV,GGAP);
    SelCh=recombin('xovsp',SelCh,0.7);
    SelCh=mut(SelCh,0.07);
    ObjVSel=fit(bs2rv(SelCh,FieldD));
    [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    gen=gen+1
    
    %找最好的染色体
    trace(gen,1)=min(ObjV);
    trace(gen,2)=sum(ObjV)/length(ObjV);
end
plot(trace(:,1)); hold on;
plot(trace(:,2)); grid;
legend('average','bestfitness');
function [fitness]=fit(x)
for i=1:size(x,1)
    i
    %随机产生一个种群
    if (x(i,6)*x(i,7)-x(i,8)*x(i,6))*(x(i,3)*x(i,2)-x(i,4)*x(i,1))==0
        x(i,:)=unidrnd(2,1,8)-1;
    end%染色体的适应度
end
a=x(:,1)+x(:,2)+x(:,3)+x(:,4);
b=x(:,5)+x(:,6)+x(:,7)+x(:,8);
for i=1:size(x,1)
    i
    if a(i)==4
        c=1;
    else
        c=0;
    end
    if b(i)==4
        d=1;
    else
        d=0;
    end
    fitness(i)=c+d;
end
fitness=fitness(:);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
上海华然企业咨询
2024-10-28 广告
上海华然企业咨询有限公司专注于AI与数据合规咨询服务。我们的核心团队来自头部互联网企业、红圈律所和专业安全服务机构。凭借深刻的AI产品理解、上百个AI产品的合规咨询和算法备案经验,为客户提供专业的算法备案、AI安全评估、数据出境等合规服务,... 点击进入详情页
本回答由上海华然企业咨询提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式