智能控制 第七章——智能控制算法介绍(部分)(二)
参考课程:https://www.bilibili.com/video/BV1PE411W7QM/?spm_id_from=333.1387.favlist.content.click&vd_source=8f8a7bd7765d52551c498d7eaed8acd5
三、粒子群优化算法
1、粒子群优化算法的背景
(1)群智能(swarm intelligence)指的是模拟生物系统利用局部信息可以产生不可预测的群行为。
(2)生活中经常能够看到成群的鸟、鱼或者浮游生物,这些生物的聚集行为有利于它们觅食和逃避捕食者,它们的群落动辄以十、百、千甚至万计,并且经常不存在一个统一的指挥者,那么它们是如何完成聚集、移动这些功能,就是粒子群优化算法研究的内容。
(3)粒子群优化算法(PSO)是一种进化计算技术(Evolutionary Computation), 由Eberhart博士和Kennedy博士于1995年提出,其基本思想是通过群体中个体之间的协作和信息共享来寻找最优解。
2、粒子群优化算法介绍
(1)场景引入:
(2)粒子群优化算法的标准形式:
(3)标准PSO算法的流程:
①初始化一群微粒(群体规模为m),包括随机位置和速度。
②评价每个微粒的适应度。
③对每个微粒,将其适应值与其经过的最好位置pbest作比较,如果较好,则将其作为当前的最好位置pbest。
④对每个微粒,将其适应值与其经过的最好位置gbest作比较,如果较好,则将其作为当前的最好位置gbest。
⑤根据公式调整微粒速度和位置。
⑥迭代终止条件根据具体问题一般选为最大迭代次数或(和)微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。
⑦未达到结束条件,则转至第二步。
3、粒子群优化算法的参数分析
(1)线性递减权值策略:
(2)局部和全局最优算法:
四、免疫遗传算法
1、免疫遗传算法的基本概念
(1)免疫传遗算法是一种基于免疫的改进遗传算法,它是生命科学中免疫原理与传统遗传算法的结合。算法的核心在于免疫算子的构造,而免疫算子又是通过接种疫苗和免疫选择两个步骤来完成的。
(2)大量研究表明,仅仅依赖于以遗传算法为代表的进化算法在模拟人类智能化处理事物能力方面还远远不足,还需要更深入地挖掘和利用人类的智能资源,而免疫遗传算法可以进一步提高算法的整体性能,并有选择有目的地利用待求解问题中的一些特征信息来抑制优化过程中退化现象的出现。
(3)类似于生命科学的免疫理论,免疫算子分为全免疫和目标免疫,两者分别对应于生命科学中非特异性免疫和特异性免疫。
①全免疫指种群中每个个体在遗传算子作用后,对其每一环节进行一次免疫操作。全免疫主要应用于个体进化的初始阶段,而在进化过程中基本上不发生,否则将很有可能产生“同化”现象。
②目标免疫则指在进行了遗传操作后,经过一定的判断,个体仅在作用点处发生免疫反应。目标免疫一般将伴随进化的全过程,它是免疫的一个基本算子。
(4)免疫遗传算法的操作过程:
①首先对所求解的问题(即抗原)进行具体分析,从中提取最基本的特征信息(即疫苗)。
②其次,对特征信息进行处理,将其转化为求解问题的一种方案(由此方案得到的所有解的集合称为基于上述疫苗所产生的抗体)。
③最后,将此方案以适当的形式转化为免疫算子,以实施具体操作。
(5)接种疫苗与免疫选择:
①待求解的特征信息往往不止一个,也就是说针对某一特定的抗原所能提取的疫苗也可能不止一个,这样,接种疫苗时可随机地选取一种疫苗进行注射,也可将多个疫苗按一定的逻辑关系进行组合后再注射。总之,免疫是在合理提取疫苗的基础上,通过接种疫苗和免疫选择两个操作来完成的,前者以提高适值,后者以防止种群的退化。
②接种疫苗:
对于个体x,对它接种疫苗是指按照先验知识来修改其某些基因位的基因,使所得个体以较大的概率具有更高的适值(适应度)
实现时须考虑以下两种极端情况:
[1]若个体y的每一基因位上的信息都是错误的,即每一位码都与最佳个体不同,则对任一个体x,x转移y的概率为0
[2]若个体y的每一基因位上的信息都是正确的,即y已是最佳个体,则对任一个体x, x转移y的概率为1
假设种群,对种群C接种疫苗是指在C中按比例
随机抽取
个个体而进行的操作
疫苗是从对问题的先验知识中提炼出来的,它所包含的信息量及其正确性对算法的性能起着重要的作用
③免疫选择:
(6)免疫遗传算法的标准流程:
2、免疫遗传算法的机理与构造
(1)免疫算子的机理:
免疫算子是由接种疫苗和免疫选择两部分操作构成的
其中,疫苗指的是依据人们对待求问题所具备的先验知识而从中提取出的一种基本的特征信息,可看作是对待求的最佳个体所能匹配模式的一种估计;抗体是指根据这种特征信息而得出的一类解,是对这种模式进行匹配而形成的样本
免疫算子中,接种疫苗作用的发挥与选取疫苗的优劣、生成抗体的好坏直接相关;免疫遗传算法的收敛性靠免疫算子中的免疫选择来保证
在免疫选择作用下,若疫苗使抗体适值得到提高,且高于当前群体的平均适值,则疫苗所对应的模式将在群体中呈指数级扩散;否则,它将被遏制或呈指数级衰减
可见,免疫选择在加强接种疫苗方面具有积极作用,在消除其负面影响方面具有鲁棒性
(2)免疫算子的执行算法:
// 输入:种群规模 n,最大迭代次数 G,终止条件
// 输出:全局最优个体 A_best
// ========== 步骤1:抽取疫苗 ==========
分析待优化问题,先理解优化目标的特点;
依据特征信息估计特定基因位上的模式,生成疫苗集合 H = {h₁, h₂, ..., hₘ};
// ========== 步骤2:初始化参数 ==========
k = 0; // 迭代次数,从第0代开始
j = 0; // 疫苗索引,从第0个疫苗开始
初始化种群 A₀ = {a₀¹, a₀², ..., a₀ⁿ}; // 随机生成初始种群
// ========== 步骤3:主迭代循环 ==========
while (未满足终止条件,例如 k < G 且未收敛) {
// ① 疫苗切换:按条件切换到下一个疫苗
if (疫苗接种触发条件 {P_I} 为 True) {
j = j + 1;
if (j > m) { // 防止疫苗索引越界
j = 1;
}
}
// ② 遍历种群,为每个个体接种疫苗
i = 0;
while (i < n) {
// 取出当前个体
a_k^i = A_k 中第 i 个个体;
a_old = a_k^i; // 记录接种前个体
f_old = 适应度(a_old); // 记录接种前适应度
// ③ 接种疫苗:用疫苗 h_j 对个体 a_k^i 进行改造
a_{H,k}^i = 接种算子(a_k^i, h_j); // 按一定概率替换基因片段
// ④ 免疫检验:只有接种后适应度更高才接受新个体,避免劣质疫苗导致种群退化
f_new = 适应度(a_{H,k}^i);
if (f_new > f_old) {
a_k^i = a_{H,k}^i; // 接受接种后的新个体
}
else {
a_k^i = a_old; // 保留原个体,拒绝接种
}
i = i + 1;
}
// ⑤ 退火选择:生成下一代种群
A_{k+1} = 退火选择算子(A_k); // 按“温度”动态调整选择压力,模拟退火思想,前期允许一定概率接受较差个体,后期逐渐收紧,平衡全局探索与局部开发
// 更新迭代次数
k = k + 1;
}
// 算法结束:输出最优个体
A_best = 种群中适应度最高的个体;
return A_best;
3、TSP问题的免疫遗传算法
(1)免疫疫苗的选取示例:
①搜索特征信息:
假设在某一时刻,从一城市出发欲前往下一个目标城市,一般首先考虑距离当地路程最近的城市;若它已被访问过,则剔除该城,然后选择该城之外的距离最小的城市;并以此类推
尽管这种贪婪策略不能保证全局最优,但在仅包含几个城市的一个很小范围内,往往不失为一个较好的策略,当然,能否作为最终的解决方案,还需要进一步的判断
②制作免疫疫苗:
就TSP问题的特点而言,在最终的最佳路径解决方案中,必然包括且尽可能包括相邻城市间距离最短的路径,显然,这种特点可作为求解问题时提供参考的一种特征信息或知识,这也是从问题中抽取疫苗的一种信息途径,因此,在具体实施过程中,只需使用一般的循环迭代方法找出所有城市的邻近城市即可(当然,某一城市可能是两个或多个城市的邻近城市,也可能都不是)
需强调的是,疫苗不是一个个体,故不能作为问题的解,它仅仅具备个体在某些基因位上的特征
③接种免疫疫苗:
(2)以平面TSP问题为例,介绍免疫遗传算法的一种实现方法:
①编码与适值函数:
为方便与直观起见,可采用N个城市的访问次序为问题的编码,适值函数的计算可采用下式
其中L为包含所有城市的最小正方形的边长,是排列为
的路径长度,N为访问城市总数
②交叉与变异算子:
采用两点交叉,其中交叉点的位置随机确定
对于变异操作,算法中加入了对遗传个体基因型特征的继承性和对进一步优化所需个体特征的多样性进行评测的环节,为此设计一种部分路径变异法,该方法每次选取全长路径的一段,路径子段的起点与终点由评测的结果估算确定,具体操作为采用连续n次的调整方式,其中n的大小由遗传代数K决定
其中M为路径子段的数目,为表示快慢程度的常数
③免疫算子:
免疫算子包括全免疫和目标免疫两种,对具体问题应视所能提取疫苗的性质而决定采用何种免疫操作
对于TSP问题,要找到适用于整个抗原(即全局问题求解)的疫苗极为困难,所以不妨采用目标免疫,具体而言,在求解问题之前先从每个城市点的周围各点中选取一个路径最近的点,以此作为算法执行过程中对该城市点进行免疫操作时所注入的疫苗
每次遗传操作后,随机抽取一些个体注射疫苗,然后进行免疫检测,即对接种了疫苗的个体进行检测,若适值提高则继续,反之则说明在交叉、变异的过程中出现了严重的退化现象,这时该个体将被父辈中对应的个体所取代。
在选择阶段,先计算其被选中的概率,后进行相应的条件判断
