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
不知道该怎么修改了,求大神指点!我的遗传算法函数用的是英国设菲尔德大学的遗传算法工具箱 展开
%% 基本遗传算法
%% 清空环境变量
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
不知道该怎么修改了,求大神指点!我的遗传算法函数用的是英国设菲尔德大学的遗传算法工具箱 展开
展开全部
发现的几处错误:
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-07-30 广告
2024-07-30 广告
Lumina缺陷检测技术是翌颖科技(上海)有限公司的核心技术之一,广泛应用于薄膜材料、半导体等高精度检测领域。该技术利用先进的检测原理,实现对材料中微小缺陷的快速、准确识别,如裂纹、气孔、异物等。Lumina缺陷检测仪器不仅具有高灵敏度和高...
点击进入详情页
本回答由翌颖科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询