免疫算法(Immune Algorithm,IA)实例详解

免疫算法是将免疫概念及其理论应用于遗传算法,在保留原算法优良特性的前提下,利用抗体浓度评价算子和激励度计算算子来保持群体的多样性,克服了一般寻优过程中(特别是多峰值)不可避免的“早熟”问题。

1 算法概念

免疫算法是受生物免疫系统的启发而推出的一种新型的智能搜索算法。 

2 主要特点

全局搜索能力

多样性保持机制

鲁棒性强

并行分布式搜索机制

3 算法流程

3.1 产生初始抗体种群

基于概率随机生成。

用matlab编写的人工免疫算法 clc clear all close all tic; global n ww m=100;% m--抗体规模 n=22;% n--每个抗体二进制字符串长度 ww=1;%参数个数 mn=100;%从抗体集合里选择n个具有较高亲和度的最佳个体进行克隆操作 xmin=[0 0]; xmax=[9 9]; tnum=100;% tnum--迭代代数 pMutate=0.1;% pMutate--高频变异概率 cfactor=0.2;% cfactor--克隆(复制)因子 A=InitializeFun(m,n); %生成抗体集合A,抗体数目为m,每个抗体基因长度为n F='X+10*sin(X.*5)+7*cos(X.*4)'; %目标函数 %F='sin(10*X)' FM=[]; %存放各代最优值的集合 FMN=[]; %存放各代平均值的集合 t=0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% while t<tnum t=t+1; X=DecodeFun(A(:,1:22),xmin,xmax); %将二进制数转换成十进制数 Fit=eval(F); %以X为自变量求函数值并存放到集合Fit中 if t==1 figure(1) fplot(F,[xmin(1),xmax(1)]); grid on hold on plot(X,Fit,'k*') title('抗体的初始位置分布图') xlabel('x') ylabel('f(x)') end if t==tnum figure(2) fplot(F,[xmin(1),xmax(1)]); grid on hold on plot(X,Fit,'r*') title('抗体的最终位置分布图') xlabel('x') ylabel('f(x)') end T=[]; %把零时存放抗体的集合清空 [FS,Affinity]=sort(Fit,'descend'); %把第t代的函数值Fit按从小到大的顺序排列并存放到FS中 XT=X(Affinity(end-mn+1:end)); %把第t代的函数值的坐标按从小到大的顺序排列并存放到XT中 FT=FS(end-mn+1:end); %从FS集合中取后mn个第t代的函数值按原顺序排列并存放到FT中 FM=[FM FT(end)]; %把第t代的最优函数值加到集合FM中 %克隆(复制)操作,选择mn个候选抗体进行克隆,克隆数与亲和度成正比,AAS是每个候选抗体克隆后在T中的开始坐标 [T,AAS]=ReproduceFun(mn,cfactor,m,Affinity,A,T); %高频变异操作,变异概率反比于抗体的亲和度 T=Hypermutation(T,n,pMutate,xmax,xmin); %把以前的抗体保存到临时克隆群体T里 AF1=fliplr(Affinity(end-mn+1:end)); %从大到小重新排列要克隆的mn个原始抗体 T(AAS,:)=A(AF1,:); %把以前的抗体保存到临时克隆群体T里%从临时抗体集合T中根据亲和度的值选择mn个(多峰函数的解决) X=DecodeFun(T(:,1:22),xmin,xmax); Fit=eval(F); AAS=[0 AAS]; FMN=[FMN mean(Fit)]; for i=1:mn [OUT(i),BBS(i)]=min(Fit(AAS(i)+1:AAS(i+1))); %克隆子群中的亲和度最大的抗体被选中 BBS(i)=BBS(i)+AAS(i); end AF2=fliplr(Affinity(end-mn+1:end)); %从大到小重新排列要克隆的mn个原始抗体 A(AF2,:)=T(BBS,:); %选择克隆变异后mn个子群中的最好个体保存到A里,其余丢失 end disp(sprintf('\n The optimal point is:')); disp(sprintf('\n x: %2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NPC_0001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值