就这?免疫算法详解
免疫算法
说实话,连续几天啃这本书,我有了些许疲惫。然后到了这一章,发现难度稍微大了一点,而且最可惜的是它竟然没有应用实例???
不过无所谓,没有就我自己网上搜呗。
然后这一章我照样会放公式上来,不过也希望大家在弄懂公式的同时,更加注重算法的实现思想,掌握了所谓的底层思想,算法自然也不会那么难了。
1.1 算法简介
免疫算法(Immune Algorithm,IA):是指以在人工免疫系统的理论为基础,实现了类似于生物免疫系统的抗原识别、细胞分化、记忆和自我调节的功能的一类算法。
引用目前百度对其的定义:
有没有看到这里好奇了的小伙伴?为啥遗传算法和免疫算法扯上了关系?
但其实学完免疫算法你会发现,两者其实非常的相似。
遗传算法的思想简单讲就是父代之间通过交叉互换以及变异产生子代,不断更新适应度更高的子代,从而达到优化的效果。
而免疫算法本质上其实也是更新亲和度(这里对应上面的适应度)的过程,抽取一个抗原(问题),取一个抗体(解)去解决,并计算其亲和度,而后选择样本进行变换操作(免疫处理),借此得到得分更高的解样本,在一次一次的变换过程中逐渐接近最后解。
1.1.1 思想来源
免疫算法最先起源于1973-1976年间Jernel的三篇关于免疫网络的文章,Jernel在文中提出了一组基于免疫独特型的微分方程,这就是最早的免疫系统。
免疫算法的主要会议:
International Conference on Artificial Immune Systems,ICARIS
1.1.2 免疫算法的生物模型
先来看一下人体免疫系统大致是怎么工作的:
具体我就不多讲了好吧,大家可能懂得比我还多,毕竟我高中毕业已经很久了害。
1.1.3 二进制模型
Farmer用二进制串表示那些描述了抗体决定簇和抗原决定基性质的氨基酸序列,然后假设每个抗原和每个康提醒分别只有一个抗原决定簇(实际都有很多)。通过这些决定基之间的匹配程度不同类型抗体的复制和减少,以达到优化系统的目的。
二进制模型模仿了免疫系统的工作原理,主要涉及识别和刺激两方面的内容。
之所以直接上图是给想要完整搞懂公式的朋友看的。
那我这里简单讲下它的实现思想。
首先是识别:通过该环节得到两者之间的匹配度,为后面刺激新抗体的生成做准备。
刺激:生成更多亲和度高的抗体,抑制其他弱抗体的生成。
1.2 免疫算法的基本流程
先简单看下免疫系统和免疫算法的对比:
1.2.1 基本流程
免疫算法的七个要素:
识别抗体,生成初始化的抗体,计算亲和度,记忆细胞分化,抗体促进和抑制,产生新的抗体,结束条件。
(1)识别抗体
把目标函数和约束作为抗体。
(2)生成初始化的抗体
随机生成独特型串维数为M的N个抗体。
(3)计算亲和度
这个步骤可以说是免疫算法的重点,同时也是最难点。
如果看到这遇到了问题,请放心,这些是正常情况,可以的话,大家阔以去参考一些实例问题,通过对实例的具体解决过程来读懂这些公式或许会更简单一些。
那这里我就稍微贴一下我觉得比较不错的推荐:https://www.bilibili.com/video/BV1pV411C7Sx?p=4
这里可能也需要大家有一定的matlab基础。
(4)记忆细胞分化
同人的免疫系统基本一致。
与抗原有最大亲和度的抗体加入了记忆细胞。由于记忆细胞数目有限,因此新生成的抗体将会代替记忆细胞中和它有最大亲和力者。
(5)抗体促进和抑制
最开始我介绍免疫算法其实就有提到这个。
通过计算抗体v的期望值,消除那些低期望值的抗体。
抗体v的期望值
e
v
e_v
ev的计算公式为:
其中抗体v的密度的计算方法如下:
其中
q
k
q_k
qk表示和抗体k有较大亲和力的抗体。通过这个公式能有效地抑制抗体的过分相似,避免算法的未成熟收敛。
(6)产生新的抗体
这里就对应我最开始提到的遗传算法和免疫算法相似地方了。
基于不同抗体和抗原亲和力的高低,使用轮盘赌的方法 ,选择两个抗体。然后把这两个抗体按一定变异概率做变异,之后再做交叉,得到新的抗体。重复操作(6)知道产生所有N个新抗体。可以说免疫算法产生新的抗体的过程需要遗传算子的辅助。
(7)结束条件
如果求出的最优解满足一定的结束条件,则结束算法。
1.2.2 更一般的基本免疫算法
1.求解多目标优化问题的免疫算法
先前我们提出的基本流程其实用于解决的知识单目标的优化问题,那如果是多目标呢?
思考一下,一个目标即一个问题,一个问题对应免疫算法其实就是一个抗原。
所以求解多目标优化问题,抗原将抗原从原先的一个扩展到L个,这个L的值即等于你一共目标的值。同时,抗原v和抗原
ω
\omega
ω的亲和度a
x
v
x_v
xv
,
_,
,
w
_w
w重新定义为:
其中op
t
v
t_v
tv
,
_,
,
w
_w
w表示抗体v和抗原
ω
\omega
ω的结合强度,即抗体v在目标函数
ω
\omega
ω中的解和此函数最优解的接近程度,至于算法的其他步骤,变化不大。
2.求解更一般问题的免疫算法
1.3 常用免疫算法
1.3.1 负选择算法
算法基本思想:需要两个字符串组成的集合R和R,通过先求一个和S不匹配的R集合,然后用R集合判断S集合是否发生了变化。
算法分成两部分,第一步是初始化R,第二步监视保护数据S。
初始化监测器R
监视保护数据S
1.3.2 克隆选择算法
克隆选择原理图
克隆选择流程图
具体理解希望大家能结合代码实现具体应用问题来理解。
1.3.3 免疫算法与智能计算
免疫遗传算法
1.4 免疫算法的应用
识别与分类问题
优化问题
机器人学习与控制
数据挖掘等
结束语
本文参考了很多张军老师《计算智能》的第七章知识。感兴趣的可以到https://blog.****.net/qq_44186838/article/details/109181453进行了解。
由于博主能力有限,博文中提及的信息,也难免会有疏漏之处。希望发现疏漏的朋友能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的方法也请不吝赐教。
如果有什么相关的问题,也可以关注评论留下自己的问题,我会尽量及时发送!
然后如果这些内容对你有所帮助的话,阔以点赞关注哦!