背景介绍
IA(Immune Algorithm):免疫算法基于生物免疫系统的基本机制,模仿了人体的免疫系统,解决了遗传算法的早熟收敛问题。因为免疫系统具有辨识记忆的特点,所以可以更快识别群体,面对待求解问题时,相当于面对各种抗原,可以提前注射疫苗抑制退化问题,从而更加保持优胜劣汰的特点。
核心思想
1. 随机产生一些记忆细胞
2. 取出部分记忆细胞,剩下抗体由随机产生
3. 根据适应度对抗体采用某种方式进行选择
4. 对选择剩余的抗体进行遗传操作,产生新的抗体
5. 回到步骤3,直到满足某个终止条件
6. 将产生的新抗体和记忆细胞比较,产生新的记忆细胞
7. 回到步骤2,直到满足某个终止条件
8. 此时得到免疫力最好的记忆细胞,比较可得该算法的最优解
算法流程
代码实战
代码中所用测试函数可以查看相关文档,测试函数(Test Function)
IA_main.m
1 | clear;clc;close all; |
f.m
1 | function res=f(x) |
实验结果
$$f(x)=x \cdot \sin(\sqrt{\lvert x \rvert}) \ , \ x \in [-500,500]$$
$$理论值:f(x)_{min}=f(-420.96874592006)=-418.982887272434$$
$$所求值:f(x)_{min}=f(-420.966448106285)=-418.982886605937$$
性能比较
- 优点:
- 受到参数影响较小
- 解决早熟收敛问题
- 从群体出发,具有并行性
- 对抗体选择的依赖性降低
- 可用于求解复杂的非线性优化问题
- 使用概率机制进行迭代,具有随机性
- 缺点:
- 对问题编码表示较为困难
- 要进行多次免疫应答,因此速度慢于遗传算法