⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ia.m

📁 这是一个有关于免疫遗传算法matlab 程序
💻 M
字号:
function [bestever,endAnti,bPop,traceInfo,memory,Found]=ia(memory,popsize,bounds,evalFN,evalOps,...
    maxgen,precision,pcross,pmutation,maxmemnum,selectOps)
%一般免疫算法,主要参考文献为
%王煦法 张显俊 曹先彬 张军 冯雷,一种基于免疫原理的遗传算法,
%小型微型计算机系统. 1999. 20(2):117-120

%设置默认参数
n=nargin;
if(n<1),
    memory={};
end
if(n<2),
    popsize=30; 
end
if(n<3),
    bounds=[-10,10;-10,10];
end
if(n<4),
    evalFN='SphereEval';
end
if(n<5),
    evalOps=[];
end
if(n<6),
    maxgen=100;
end
%if(n<6),
%    maxruns=1;
%end
if(n<7),
    precision=1e-6;
end
if(n<8),
    pcross=0.6;
end
if(n<9),
    pmutation=0.05;
end
if(n<10),
    maxmemnum=5;
end
if(n<11),
    selectOps=[0.9 round(popsize/5) 0.5];
    %抗体促进与抑制过程中用到参数CLimit,t,a
end

bits=caculatebits(precision,bounds);%编码位串
done=0;%设置结束标志为非
gen=1; %设置代数计数位为1
oval=0;%初始化最大适应度值
bFoundIn=1;%设置bval中下一个最佳个体信息保留位置的指针

%1抗原识别
[Found]=antigenFound(memory,bounds,evalFN,precision);

%2初始种群生成
startanti=initializeAnti(popsize,memory,Found,bits);

%如果不满足结束条件进行免疫算法进化操作
while(~done)
    %3计算适应度值
    valmat=valCalculate(startanti,bounds,evalFN,evalOps,precision);
    
    %计算当前群体中的最优个体得bestever
    [bval,bindx] = max(valmat); 
    
    %保存当前代信息到traceInfo(gen,:)中
    traceInfo(gen,1)=gen; 		                        %当前代数
    traceInfo(gen,2)=valmat(bindx);                     %最佳适应度
    traceInfo(gen,3)=mean(valmat);                      %平均适应度
    traceInfo(gen,4)=std(valmat);                       %适应度标准差
    
    %如果有更优解则更新bval
    if ( ((bval - oval)>precision) | (gen==1))         
        bPop(bFoundIn,:)=[gen b2f(startanti(bindx,:),bounds,bits) valmat(bindx)];
        bFoundIn=bFoundIn+1;                     
        oval=bval;
    end
    
    %4向记忆细胞分化
    [memory,Found]=wMemory(startanti,valmat,bounds,evalFN,precision,...
        memory,Found,maxmemnum);
    
    %5抗体的促进和抑制
    C=consistency(startanti,selectOps(1));
    Pc=caculatepc(C,selectOps(2));
    Pf=calculatePf(valmat);
    P=calculateP(Pc,Pf,selectOps(3));
    newanti = rouletteSelect(startanti,P);
    
    %6交叉
    newanti = singlePopCross(newanti,pcross);
    
    %二进制变异
    [newanti] = biPopMutate(newanti,pmutation);
    
    %如果不满足结束条件进入下一代
    gen=gen+1;
    if(gen>=maxgen),
        done=1;
    end
    startanti=newanti;
end

%计算最后一代群体中的最优个体得bestever
valmat=valCalculate(startanti,bounds,evalFN,evalOps,precision);
[bval,bindx] = max(valmat);               
    
%保存最后一代群体信息到traceInfo(gen,:)中
traceInfo(gen,1)=gen; 		                        %当前代数
traceInfo(gen,2)=valmat(bindx);                     %最佳适应度
traceInfo(gen,3)=mean(valmat);                      %平均适应度
traceInfo(gen,4)=std(valmat);                       %适应度标准差
    
%如果是更优解则更新bval
if ( ((bval - oval)>precision) | (gen==1))
    bPop(bFoundIn,:)=[gen b2f(startanti(bindx,:),bounds,bits) valmat(bindx)];
    bFoundIn=bFoundIn+1;                     
    oval=bval;
end
%4向记忆细胞分化
[memory,Found]=wMemory(startanti,valmat,bounds,evalFN,precision,...
    memory,Found,maxmemnum);

bestever=bPop(bFoundIn-1,2:size(bPop,2));
endAnti=startanti;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -