遗传算法

46 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情

1 编码

由于遗传算法不能直接处理问题空间的参数,所以需要将解空间中的解数据表示成遗传空间中的基因串结构数据。编码就是对实际问题进行数学化表示的过程。

2 初始种群的产生

种群就是模拟生物种群,是由若干个体组成的群体,它一般是整个搜索空间的一个很小的子集,遗传算法的初始种群是随机产生的。

当初始种群数量过大时,一方面计算复杂度会增加,降低运行效率;另一方面,部分适应度值较高的个体可能被淘汰,影响交叉。当初始种群数量过小时,可提高算法的运算速度,但迭代次数会增加,并使自身的搜索空间受限,搜索有可能停止在早熟阶段,进而使算法陷人局部最优。因此在选取种群规模大小时,既要注重保持种群的多样性,又要兼顾算法效率,通常情况下须在进行多次试验后确定一个折中值。

3 适应度函数的确定

适应度函数用来衡量个体的优劣性,是进行自然选择的唯一依据。遗传算法要求适应度函数单值、非负,还要求问题的优化方向要与适应度函数值的增大方向一致,适应度值越大,个体越优。在解决实际问题时,如果遇到是求极小值或负值,需要对所选择的适应度函数进行一定的变换,保证二者在数学优化上的等价性。

4 遗传算子

遗传算子是模拟生物进化过程的关键,包括选择算子、交叉算子和变异算子,它们是遗传算法的核心和基本算子。

4.1 选择算子

选择算子作用于群体,目的是把优化的个体遗传到下一代,使优良的个体有机会作为父代来繁殖子代,选择算子是建立在适应度评估的基础上的。进行选择的原则是将适应度值高的个体保留,以使其基因能够遗传到下一代,而适应度值低的个体则被淘汰。因此选择的本质是筛选,其功能是定向进化。利用选择算子进行多次定向积累,种群中的个体就会迅速向适应度值高的区域靠扰,形成高质量的种群。

4.2 交叉算子

交叉算子是指把两个父代个体的部分基因加以替换重组而生成新个体,是遗传算法中最主要的遗传操作。它的作用是不断产生新的染色体,避免算法陷入局部最优。一方面,它使得原来种群中优良个体的特性能够在一定程度上保留;另一方面,它使得算法能够探索新的解空问,从而使新种群中的个体具有多样性。

4.3 变异算子

遗传算法在选择算子和交叉算子的作用下已经能起到种群进化的作用,但在这个过程中,算法无法保证一些重要的遗传信息不丢失。因此,仅仅依靠这两种遗传操作,算法缺乏搜索整个解空间的能力,并且所获得的解可能是局部最优解。为了模仿生物遗传和进化过程中的这种变异现象,在遗传算法中引入了变异算子来产生新的个体,变异算子的基本内容是对种群中的个体串上的基因值做变动,在进化过程中较好地扩展了算法的搜索空间,使算法有能力在整个解空间进行鲁棒搜索而不会陷入局部最优。

5 停止准则

遗传算法是一种反复迭代的搜索算法,它通过多次进化逐渐逼近最优解,因此需要确定停止准则。最常用的停止准则是规定遗传的代数,即迭代次数。当遗传算法是用来产生新的规则时,停止准则不能简单地用遗传代数确定,可以根据适应度的值是否收敛来终止循环。