【计算智能】读书笔记 第七章节 免疫算法 Part1


1. 什么是免疫算法

免疫算法 (Immune Algorithm, A) 是指以人 免疫系统的理论为基础,在体细胞理论和网络理论的启发下,实现的类似 生物免疫系统的抗原识别、细胞分化、记忆和自我调节功能的一类算法

  • 抗原
    • 目标函数
    • 被免疫系统看做异体 引起免疫反应的分子
  • 抗体
    • 优化解
    • 每种抗体只识别特定的目标抗原
  • 抗原和抗体之间的亲和性
    • 解与目标函数的匹配程度
    • 抗体和抗原,抗体和抗体之间的相似程度
  • B细胞
    • 全称是 淋巴细胞,在骨髓分化成熟,免疫系统的本质部分
  • T细胞
    • 全称是 淋巴细胞,在胸腺分化成熟

2

2.二进制模型

二进制模型模仿了免疫系统的丁作原理, 要涉及识别和刺激两方面的内容:

2.1 识别

每个抗体可以用 ( e , p ) (e,p) (e,p)二进制串表示,匹配特异矩阵为:

m i j = ∑ k G ( ∑ n e i ( n + k ) ∧ p j ( n ) − s + 1 ) m_{i j}=\sum_k G\left(\sum_n e_i(n+k) \wedge p_j(n)-s+1\right) mij=kG(nei(n+k)pj(n)s+1)

其中,
G ( x ) = { x , x > 0 0 , x ⩽ 0 G(x)= \begin{cases}x, & x>0 \\ 0, & x \leqslant 0\end{cases} G(x)={x,0,x>0x0

要根据以上公式算出 m i j m_{i j} mij 必须求出 k k k 的所有情况之和,但实际上大可不必, 只需求 − 2 ⩽ k ⩽ 2 -2 \leqslant k \leqslant 2 2k2 的情况即可。下图所示的是抗体 i i i 的抗体决定簇和抗体 j j j 的抗原决定基在k = -1时候的匹配情况。
2
模型还指出当 淋巴细胞识别到抗原决定基时,它受到刺激并分裂,产生更多表面附着相同抗体类型的B淋巴细胞(此处简化免疫学的原理,把自由抗体和B细胞的抗体集中)

2.2 刺激

二进制串之间的匹配,其目的是为了刺激新的抗体的生成
下面建立相应的微分方程模型 [ 4 ] { }^{[4]} [4], 设 N N N 种类型的抗体, 浓度为 { x 1 , x 2 , ⋯   , x n } , n \left\{x_1, x_2, \cdots, x_n\right\}, n {x1,x2,,xn},n 种类 型的抗原, 浓度为 { y 1 , y 2 , ⋯   , y n } \left\{y_1, y_2, \cdots, y_n\right\} {y1,y2,,yn}, 这里的浓度就是某类抗体或抗原的具体数量。那么抗体浓度的变化方程为:

x i ′ = c [ ∑ j = 1 N m j i x i x j − k 1 ∑ j = 1 N m i j x i x j + ∑ j = 1 N m j i x i y j ] − k 2 x i x_i^{\prime}=c\left[\sum_{j=1}^N m_{j i} x_i x_j-k_1 \sum_{j=1}^N m_{i j} x_i x_j+\sum_{j=1}^N m_{j i} x_i y_j\right]-k_2 x_i xi=c[j=1Nmjixixjk1j=1Nmijxixj+j=1Nmjixiyj]k2xi

抗体和抗原的动态调整规则如下:

在这里插入图片描述

3. 算法的基本模型

3.1 免疫系统名词与免疫算法名词比较

免疫系统免疫算法
抗原要求解的问题
抗体最佳解向量
抗原识别问题识别
从记忆细胞产生抗体联想过去的成功解
淋巴细胞分化(记忆细胞分化)维待最优解
T细胞抑制消除多余的候选解
抗体生命增加(细胞克隆)用遗传算子生成新的抗

3.2 算法的基本流程图

1

3.3 识别抗体&初始化

把目标函数和约束作为抗体
随机生成独特型串维数为 M 的 N 个抗体

3.4 计算亲和度

抗体 + 抗原

抗体 v v v和抗原的亲和度为 a x v ax_v axv:
a x v = 1 1 + o p t v a x_v=\frac{1}{1+o p t_v} axv=1+optv1

其中:
o p t v = ∣ f v − f max ⁡ f max ⁡ ∣ o p t_v=\left|\frac{f_v-f_{\max }}{f_{\max }}\right| optv= fmaxfvfmax
f m a x f_{max} fmax是最优解的适应值, f v f_v fv 是抗体 v v v的适应值

抗体 + 抗体

抗体 v v v 和抗体 w w w 的亲和度为:
a y v , w = 1 1 + E ( 2 ) a y_{v, w}=\frac{1}{1+E(2)} ayv,w=1+E(2)1

免疫系统有 N N N 个抗体, 有 M M M 个基因 (或独特 型串的长度为 M ) M) M), 第 j j j 个基因的信息熵为 E j ( N ) E_j(N) Ej(N) :
E j ( N ) = ∑ i = 1 N − p i j log ⁡ κ p i j E_j(N)=\sum_{i=1}^N-p_{i j} \log _\kappa p_{i j} Ej(N)=i=1Npijlogκpij
其中 K K K 表示独特型串的字母表的长度, 若为二进 制数就是 2 , p i j 2, p_{i j} 2,pij 表示选择第 i i i 个抗体的第 j j j 位等 位基因的概率, 很明显 ∑ i = 1 N p i j = 1 \sum_{i=1}^N p_{i j}=1 i=1Npij=1, 所以代表多 样性的平均信息熵 E ( N ) E(N) E(N) 为:
E ( N ) = 1 M ∑ i = 1 M E j ( N ) E(N)=\frac{1}{M} \sum_{i=1}^M E_j(N) E(N)=M1i=1MEj(N)

3.5 记忆细胞分化

与抗原(问题)有最大亲和度的抗体(解)加入了记忆细胞,由于记忆细胞数目有限,因此新生成的抗体将会代替记忆细胞中和它有最大亲和力者

3.6 抗体促进和抑制

抗体 v v v 的期望值 e v e_v ev 的计算公式为:
e v = a x v c v e_v=\frac{a x_v}{c_v} ev=cvaxv

抗体v的密度计算方法如下:

c v = − q k N c_v=-\frac{q_k}{N} cv=Nqk

3.7 产生新的抗体

根据不同抗体和抗原亲和力的高低,使用轮盘赌的方法,选择两个抗体,然后把这两个抗体按 定变异概率做变异,之后再做交叉,得到新的抗体

3.8 结束条件

如果求出的最优解满足 定的结束条件,则结束

4. 免疫算发解决多目标优化

对于多目标优化问题,可以把抗原扩展到 L L L 个 ( L L L 和具体的目标数目相等), 并把抗 体 v v v 和抗原 w w w 的亲和度 a x v , w a x_{v, w} axv,w 重新定义为:
a x v , w = 1 1 + o p t v , w a x_{v, w}=\frac{1}{1+o p t_{v, w}} axv,w=1+optv,w1

在这里插入图片描述
此时亲和度的计算公式如下:

a x v = 1 1 + t v a y v , w = 1 1 + H v , w \begin{aligned} &a x_v=\frac{1}{1+t_v} \\ &a y_{v, w}=\frac{1}{1+H_{v, w}} \end{aligned} axv=1+tv1ayv,w=1+Hv,w1


写在最后

各位看官,都看到这里了,麻烦动动手指头给博主来个点赞8,您的支持作者最大的创作动力哟!
才疏学浅,若有纰漏,恳请斧正
本文章仅用于各位作为学习交流之用,不作任何商业用途,若涉及版权问题请速与作者联系,望悉知

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值