一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情。
1. 遗传算法
遗传算法基本解释及概念术语请参考上篇文章智能算法-遗传算法(1)
简单回顾一下遗传算法大体思想:遗传算法首先需要把初始解集以某种手段编译成遗传基因序列(染色体),如下图所示就是一个编译完成的染色体,这个染色体代表(对应)着一个初始解。当然,为了涵盖所有种群基因,需要先编译产生很多很多类似的染色体。 然后,很多很多这样的染色体就组成一个初始种群。接下来就开始繁衍,计算出该种群内的每个染色体的优劣程度(适应度)进行比较,淘汰一部分比较差的个体。
对于剩下的个体进行基因重组,两两染色体进行基因序列交换(交叉),组成新的子代染色体序列。对于新的子代染色体序列,有一定几率出现变异(染色体基因序列某几个基因发生改变)。
接下来,这些子代作为父代,再重复以上所有操作,实现了优胜劣汰,经过多代的繁衍,最终省下来的染色体就是找到的最优解。
2. 简单实例详解
2.1 问题阐述
总共有 种物品, 种物品有各自的重量和价值。现有一个背包,最大载重量为 ,想要把挑选一些物品装进背包,使得不超过最大载重量的同时,所携带的物品价值总和最大。
2.2 步骤一:编码操作
考虑使用长度为的染色体进行编码,编码方式为二进制编码,即染色体的每一个位置使用或进行表示。解释:因为有个物品,染色体长度选为,如果选择将物品装入背包,则染色体的第个位置用表示。如果不装入背包,则对应位置用表示。
例如, 代表的含义为将第个物品和第个物品装入背包,其余物品不装入。
2.2 步骤二:产生初始种群
随机产生10个初始种群(为了方便起见此处选10个初始种群,也可以选其他数量),产生的初始种群如下所示。
从另一个角度来讲,这10个初始种群就相当于是10个初始选择方案。
2.3 步骤三:计算适应度
对于本题,适应度可以用每个染色体物品总价值表示,即每个方案的总价值。假设经过计算后,每个染色体的适应度如下表所示。
| 个体 | 染色体 | 适应度 |
|---|---|---|
为简单起见,此处假设以上染色体均符合最大重量要求。(正常情况下,需要在此处加一步判断,若某个染色体表示的物品重量总和超过背包最大重量,需要将该染色体舍弃掉)
2.4 选择
计算出每个[个体的适应度]占[总体适应度总和]的比值。
例如对于个体1,选择概率为:,其他个体计算方式以此类推。
此处,我们将这些个体按比例概率大小画成一个飞镖盘,随机投出8只飞镖,看看最后落在哪里,被飞镖击中的区域所代表的个体保留下来,其余的淘汰掉(这就是轮盘赌选择法的大体思想,概率大的个体,保留下来的概率也大)。
假设本轮经过轮盘赌选择法,将个体2和个体3淘汰掉了。
2.4 步骤四:交叉
此处我们选择单点交叉:首先将刚才选择保留下来的染色体,两两排成一对儿(如果存在“没有被排成对”的染色体,可以将其舍弃),然后,随机选择一个点位,将染色体一刀切断,两两互相交换。如下图所示。
2.5 步骤五:变异
将交叉完的个体,每一个点位以一定概率进行变异,如下图所示,该点位的基因由1变成0。
经过以上步骤,就走完了完整的一代繁衍,繁衍出了第2代个体。接下来再重复以上所有操作繁衍第3代,第4代直到算法结束,这就是遗传算法的基本步骤流程。