概述
遗传算法(Genetic Algorithm, GA)是一种基于自然选择和遗传学原理的优化算法,广泛应用于搜索和优化问题。其基本原理可以总结如下:
1、编码(Encoding):
将解决方案表示为染色体(Chromosomes),通常是字符串或数组。每个染色体包含若干基因(Genes),基因可以是二进制位、实数或其他适合问题的表示方法。
2、初始种群(Initial Population):
随机生成一定数量的染色体作为初始种群。种群规模通常对算法性能有显著影响。
3、适应度函数(Fitness Function):
为每个染色体定义一个适应度函数,用于衡量其在解决问题上的优劣。适应度函数的设计直接影响算法的效果。
4、选择(Selection):
根据适应度值选择染色体进行繁殖,适应度高的染色体有更大概率被选中。常用的选择方法包括轮盘赌选择(Roulette Wheel Selection)、锦标赛选择(Tournament Selection)等。
5、交叉(Crossover):
通过交叉操作将两个染色体(父代)组合生成新的染色体(子代)。常用的交叉方法包括单点交叉(Single-point Crossover)、两点交叉(Two-point Crossover)和均匀交叉(Uniform Crossover)等。
6、变异(Mutation):
以一定概率对染色体中的基因进行随机修改,以引入多样性并防止算法陷入局部最优解。变异操作有单点变异(Single-point Mutation)、多点变异(Multi-point Mutation)等。
7、进化(Evolution):
经过选择、交叉和变异操作后,生成新一代种群。新一代种群将替代旧种群,并重复上述过程直到满足终止条件,如达到最大迭代次数或找到满意的解。
8、终止条件(Termination Condition):
算法通常在满足某些条件时终止,如达到预定的迭代次数、适应度值达到某个阈值或种群中个体的多样性不足。
遗传算法通过模拟自然选择和遗传机制,能够有效地在大搜索空间中找到近似最优解,特别适用于复杂的、非线性、多峰值优化问题。
算法基本流程
![](https://i-blog.csdnimg.cn/direct/61bfa4d81142481b8a8dabc32166f976.png)
1、创建初始种群
GA基于数据集的每行数据创建初始种群,这个初始种群包含基于原行值和基于种子生成的染色体(chromosome),每个染色体都包含可变(operable)的和不可变的元素。在交叉和突变操作之前,这个染色体被分为两个部分,可变的部分(M)和不可变的部分(F)。一旦染色体被分开,启发式操作就可以在可操作染色体的子集完成,示意图如图2所示。
![](https://i-blog.csdnimg.cn/direct/69ca953d4c434d2bb87ab98d12a50be4.png)
2、交叉操作
首先, 两个父染色体被从种群中随机选择,交叉索引(crossover index)被随机选择。然后,这个索引将父染色体分为左和右两部分。这个右染色体被父染色体之间进行随机交换形成新的可操作染色体(operable chromosome)。最后,这个形成的新的子染色体被插入种群中,示意图如图3所示。
![](https://i-blog.csdnimg.cn/direct/8056d8b8dd3c468d9aa4e3ea690a0790.png)
3、突变
首先,基于突变率在种群中随机选择染色体进行突变操作。然后随机选择突变索引,在索引处随即更换里面的数值,形成新的染色体,示意图如图4所示。
![](https://i-blog.csdnimg.cn/direct/97a72e18233248f8b4449ad24ef51be5.png)
4、选择
在完成交叉和突变操作之后,染色体适应函数将会被评估。首先,我们将可操作染色体和不可变染色体结合形成一个新的染色体,即将全为M的染色体和全为F的染色体结合形成新的染色体。然后,对于每一代最好的染色体(适应度好的,不一定适应度越高越好,根据具体情况而定)作为下一代。
5、判断是否满足终止条件
选择、交叉和突变操作一直被重复,直到迭代的次数达到或者下一代的改善不明显的时候停止。
GA伪代码
1、选择交叉率、突变率,染色体的数量和最大迭代次数
2、将种子向量分为不可变和可变子向量
3、生成可变向量初始化种群
4、 创建可变种子向量作为染色体
5、 随机产生不变染色体
6、 利用固定比例的种子向量确定种群的最佳适应度
7、while(迭代次数 < 最大迭代次数 && 适应度提高量 > 最小适应度提高量)do
8、 for 交叉迭代的次数 do
9、 随机选择两个父染色体
10、 随机选择交叉索引
11、 在索引处完成交叉
12、 向种群中添加两条后代染色体
13、 for 种群中总共染色体的个数 do
14、 if 随机数 <= 突变率 then
15、 随机选择突变索引
16、 使用新的值在突变索引处更新染色体
17、 计算每个染色体的适用度
18、 更新群体最好适应度
19、 使用轮盘赌方法选择下一代
遗传算法中的精英主义(elitism)
为什么要选择精英主义策略?
尽管遗传算法群体的平均适应度通常随着世代的增加而增加,但在任何时候都有可能失去当代的最佳个体。这是由于选择、交叉和变异运算符在创建下一代的过程中改变了个体。在许多情况下,丢失是暂时的,因为这些个体(或更好的个体)将在下一代中重新引入种群。但是,如果要保证最优秀的个体总是能进入下一代,则可以选用精英主义策略。
方法
这意味着,在我们使用通过选择、交叉和突变创建的后代填充种群之前,将前n个个体(n是预定义参数)复制到下一代。复制后的的精英个体仍然有资格参加选择过程,因此仍可以用作新个体的亲本。
结果
Elitism策略有时会对算法的性能产生重大的积极影响,因为它避免了重新发现遗传过程中丢失的良好解决方案所需的潜在时间浪费。
小生境与共享
什么是小生境与共享?
由于遗传算法的趋势是找到全局最大值,因此一段时间后大多数个体集中在最高峰附近。在图5中通过使用×标记的位置表示这一点,×代表了当前代的个体。
![](https://i-blog.csdnimg.cn/direct/89931efea9794ec9b3f8e8801c5a09a0.png)
但是有时,除了全局最大值外,我们还希望找到其他部分(或全部)峰值。为此,可以将每个峰视为小生境,以与其高度成比例的方式提供资源。
然后,找到一种在占用资源的个体之间共享(或分配)这些资源的方法,理想情况下,这将促使物种进行相应的分配,最高峰会吸引最多的人,因为它提供的奖励最多,而其他峰由于提供较少的奖励而相应减少物种数量(如图6所示)。
![](https://i-blog.csdnimg.cn/direct/e7dc6eb29b6a431db2711407c7d50b7e.png)
参考:
超详细的遗传算法(Genetic Algorithm)解析 - upstreamL - 博客园 (cnblogs.com)
遗传算法(Genetic Algorithm)详解与实现-CSDN博客
https://www.sciencedirect.com/science/article/pii/S0957417421011507