type
status
date
slug
summary
tags
category
icon
password
Property
原理
生物免疫系统是-一个复杂的自适应系统。免疫系统能够识别出病原体,具有学习、记忆和模式识别能力,因此可以借鉴其信息处理机制来解决科学和工程问题。免疫算法正是基于生物免疫系统识别外部病原体并产生抗体对抗病原体的学习机制而提出的,由此诞生了基于免疫原理的智能优化方法研究这一新的研究方向。
- 它具有一般免疫系统的特征,采用群体搜索策略,通过迭代计算,最终以较大的概率得到问题的最优解
- 相比较于其他算法,免疫算法利用自身产生多样性和维持机制的特点,保证了种群的多样性,克服了一般寻优过程(特别是多峰值的寻优过程)中不可避免的“早熟”问题,可以求得全局最优解。
- 免疫算法具有自适应性、随机性、并行性、全局收敛性、种群多样性等优点
生物免疫系统 | 免疫算法 |
抗原 | 待优化的问题 |
抗体(B细胞) | 可行解 |
亲和度 | 可行解的质量,相当于遗传算法的fitness |
细胞活化 | 免疫选择 |
细胞分化 | 个体克隆 |
亲和度成熟 | 变异 |
克隆抑制 | 克隆抑制 |
动态维持平衡 | 种群刷新 |
根据上述的对应关系,模拟生物免疫应答的过程形成了用于优化计算的免疫算法。算法主要包含以下几大模块:
- 抗原识别与初始抗体产生。根据待优化问题的特点设计合适的抗体编码规则,并在此编码规则下利用问题的先验知识产生初始抗体种群。
- 抗体评价。对抗体的质量进行评价,评价准则主要为抗体亲和度和个体浓度,评价得出的优质抗体将进行进化免疫操作,劣质抗体将会被更新。
- 免疫操作。利用免疫选择、克隆、变异、克隆抑制、种群刷新等算子模拟生物免疫应答中的各种免疫操作,形成基于生物免疫系统克隆选择原理的进化规则和方法,实现对各种最优化问题的寻优搜索
免疫算法算子
免疫算法的算子包括:亲和度评价算子、抗体浓度评价算子、激励度计算算子、免疫选择算子、克隆算子、变异算子、克隆抑制算子和种群刷新算子等。由于算法的编码方式可能为实数编码、离散编码等,不同编码方式下的算法算子也会有所不同
亲和度评价算子
- 亲和度评价表征算子免疫细胞与抗原的结合强度
- 亲和度评价算子通常是一个函数
- 其中 为问题的可行解区间, 为实数域。函数的输入为一个抗体个体(可行解),输出即为亲和度评价结果
抗体浓度评价算子
抗体浓度评价表征算子抗体种群的多样性好坏。抗体浓度过高意味着种群中非常类似的个体大量存在,不利于全局优化
抗体浓度通常定义为:
式中: 为种群规模; 表示抗体间的相似度,可表示为:
其中 为种群中的第 个抗体, 为抗体 与抗体 的亲和度, 为相似度阈值
亲和度计算方法:
- 对于实数编码的算法,抗体间亲和度计算通常可以通过抗体向量之间的欧氏距离来计算:
和分别为抗体的第维和抗体的第维, 为抗体编码总维数
- 对于离散编码的算法,衡量抗体-抗体方法亲和度最直接的方法就是利用抗体串的海明距离:
激励度计算算子
- 抗体激励度是对抗体质量的最终评价结果,需要综合考虑抗体亲和度和抗体浓度,通常亲和度大、浓度低的抗体会得到较大的激励度
- 抗体激励度的计算通常可以利用抗体亲和度和抗体浓度的评价结果进行简单的数学运算得到,二者取其一,如:
为抗体的激励度;a、b 为计算参数,可以根据实际情况确定
免疫选择算子
- 免疫选择算子根据抗体的确定选择哪些抗体进入克隆选择操作激励度
- 在抗体群中激励度高的抗体个体具有更好的质量,更有可能被选中进行克隆选择操作,在搜索空间中更有搜索价值。
克隆算子
克隆算子将免疫选择算子选中的抗体个体进行复制。克隆算子可以描述为:
为个与相同的克隆构成的集合;为抗体克隆数目,可以事先确定,也可以动态自适应计算
变异算子
- 变异算子对克隆结果进行变异操作,以产生亲和度突变,实现局部搜索
- 变异算子是免疫算法中产生有潜力的新抗体、实现区域搜索的重要算子,它对算法的性能有很大影响
- 变异算子也和算法的编码方式相关,实数编码的算法和离散编码的算法采用不同的变异算子
实数编码变异算子
实数编码算法的变异策略是在变异源个体中加入一个小扰动,使其稍偏离原来的位置,落入源个体邻域中的另一个位置,实现变异源邻域的搜索。实数编码算法变异算子可以描述:
式中: 是抗体 的第个克隆体的第维; 为定义的邻域的范围,可以事先确定,也可以根据进化过程自适应调整;
rand 是产生(0,1)范围内随机数的函数; 为变异概率
离散编码变异算子
离散编码算法以二进制编码为主,其变异策略是从变异源抗体串中随机选取几位元,改变位元的取值(取反),使其落在离散空间变异源的邻域
克隆抑制算子
- 克隆抑制算子用于对经过变异后的克隆体进行再选择,抑制亲和度低的抗体,保留亲和度高的抗体进入新的抗体种群。
- 在克隆抑制的过程中,克隆算子操作的源抗体与克隆体经变异算子作用后得到的临时抗体群共同组成一个集合,克隆抑制操作将保留此集合中亲和度最高的抗体,抑制其他抗体。
- 由于克隆变异算子操作的源抗体是种群中的优质抗体,而克隆抑制算子操作的临时抗体集合中又包含了父代的源抗体,因此在免疫算法的算子操作中隐含了最优个体保留机制。
种群刷新算子
- 种群刷新算子用于对种群中激励度较低的抗体进行刷新
- 从抗体种群中删除这些抗体并以随机生成的新抗体替代
- 有利于保持抗体的多样性,实现全局搜索,探索新的可行解空间区域
免疫算法的流程
关键参数
免疫算法种类
克隆选择算法
Castro提出了基于免疫系统的克隆选择理论的克隆选择算法,该算法是模拟免疫系统学习过程的进化算法:
- 免疫应答产生抗体是免疫系统的学习过程,抗原被一些与之匹配的B细胞识别,这些B细胞分裂,产生的子B细胞在母细胞的基础上发生变化,以寻求与抗原匹配更好的B细胞,
- 与抗原匹配更好的子B细胞再分裂……如此循环往复,最找到与抗原完全匹配的B细胞,B细胞变成浆细胞产生抗体,这一过程就是克隆选择过程,
免疫遗传算法
Chun 等人提出了一种免疫算法,实质上是改进的遗传算法:
- 根据体细胞和免疫网理论改进了遗传算法的选择操作,从而保持了群体的多样性,提高算法的全局寻优能力。
- 通过在算法中加入免疫记忆功能,提高了算法的收敛速度。
- 免疫遗传算法把抗原看作目标函数,将抗体看作问题的可行解,抗体与抗原的亲和度看作可行解的适应度。
- 免疫遗传算法引入了抗体浓度的概念,并用信息熵来描述,表示群体中相似可行解的多少。
- 免疫遗传算法根据抗体与抗原的亲和度和抗体的浓度进行选择操作,亲和度高且浓度小的抗体选择率大,这样就抑制了群体中浓度高的抗体,保持了群体的多样性
反向选择算法
Forrest基于反向选择原理提出了反向选择算法,用于进行异常检测。算法主要包括两个步骤:
- 首先,产生一个检测器集合,其中每一个检测器与被保护的数据不匹配;
- 其次,不断地将集合中的每一个检测器与被保护数据相比较,如果检测器与被保护数据相匹配,则判定数据发生了变化。
疫苗免疫算法
焦李成等人基于免疫系统的理论提出了基于疫苗的免疫算法,该算法是在遗传算法中加入免疫算子,以提高算法的收敛速度并防止群体退化。免疫算子包括疫苗接种和免疫选择两个部分,前者为了提高亲和度,后者为了防止种群退化。理论分析表明这种免疫算法是收敛的。
疫苗免疫算法的基本步骤是:
- 随机产生NP个个体构成初始父代群体;
- 根据先验知识抽取疫苗;
- 计算当前父代NP种群所有个体的亲和度,并进行停止条件的判断;
- 对当前的父代群体进行变异操作,生成子代群体;
- 对子代群体进行疫苗接种操作,得到新种群;
- 对新群体进行免疫选择操作,得到新一代父本,并进入免疫循环。
代码
TSP问题
调库实现IA
IA_TSP输入参数
入参 | 默认值 | 意义 |
func | - | 目标函数 |
n_dim | - | 城市个数 |
size_pop | 50 | 种群规模 |
max_iter | 200 | 最大迭代次数 |
prob_mut | 0.001 | 变异概率 |
T | 0.7 | 抗体与抗体之间的亲和度阈值,大于这个阈值认为亲和,否则认为不亲和 |
alpha | 0.95 | 多样性评价指数,也就是抗体和抗原的重要性/抗体浓度重要性 |
IA输出参数
ia.generation_best_Y
每一代的最优函数值
ia.generation_best_X
每一代的最优函数值对应的输入值
ia.all_history_FitV
每一代的每个个体的适应度
ia.all_history_Y
每一代每个个体的函数值
ia.best_y
最优函数值
ia.best_x
最优函数值对应的输入值