免疫算法

免疫算法是受生物免疫系统启发的智能搜索算法,结合确定性和随机性,具备全局搜索、多样性保持、鲁棒性强及并行分布式搜索等特性。算法主要包括抗原识别、抗体评价和免疫操作,如抗体选择、克隆、变异和克隆抑制,用于解决优化问题,如TSP问题。
摘要由CSDN通过智能技术生成

      免疫算法是受生物免疫系统的启发而推出的一种新型的智能搜索算法,是一种确定性和随机性选择相结合并具有"勘探"与"开采"能力的启发式随机搜索算法。

     

   算法主要的步骤:

     (1)抗原识别与初始抗体产生。

     (2)抗体评价

     (3)免疫操作

   免疫算法的特点:

     (1)全局搜索能力

     (2)多样性保持机制

     (3)鲁棒性强

     (4)并行分布式搜索机制

   免疫算法流程图:

    

用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
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值