📄 ia.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 + -