matlab遗传算法代码检查错误

2022-08-20 社会 90阅读

发现的几处错误:

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    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(:);
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com