图8.12 种群多样性比较
多样性是遗传算法必不可少的本质属性,这是因为它能使遗传算法搜索一个比较大的解的空间区域。
8.2.4.5 适应度值和最佳适应度值
个体的适应度值就是该个体的适应度函数的值。由于该工具箱总是查找适应度函数的最小值,所以一个种群的最佳适应度值就是该种群中任何个体的最小适应度值。 8.2.4.6 父辈和子辈
为了生成下一代,遗传算法在当前种群中选择某些个体,称为父辈,并且使用它们来生成下一代中的个体,称为子辈。典型情况下,该算法更可能选择那些具有较佳适应度值的父辈。
8.2.5 遗传算法如何工作
本节简要介绍遗传算法的工作原理或工作过程,内容包括:算法要点;初始种群;生成下一代;后一代的绘图;算法的停止条件。 8.2.5.1 算法要点
下面的要点总结了遗传算法是如何工作的: (1) 首先,算法创建一个随机种群。
(2) 接着,算法生成一个新的种群序列,即新的一代。在每一步,该算法都使用当前一代中的个体来生成下一代。为了生成新一代,算法执行下列步骤:
(a) 通过计算其适应度值,给当前种群的每一个成员打分。
(b) 确定原来的适应度值的比例尺度,将其转换为更便于使用的范围内的值。 (c) 根据它们的适应度选择父辈。
(d) 由父辈产生子辈。子辈的产生可以通过随机改变一个单个父辈,亦即变异(mutation)来进行,也可以通过组合一对父辈的向量项,亦即交叉(crossover)来进行。
(e) 用子辈替换当前种群,形成下一代。
(3) 最后,若停止准则之一得到满足,则该算法停止。关于停止准则,可参见“8.2.5.7 算法的停止条件”一节。
145
8.2.5.2 初始种群
遗传算法总是以产生一个随机的初始种群开始,如图8.13所示。
图8.13 初始种群
在本例中,初始种群包含20个个体,这恰好是“Population(种群)”选项中的“Population size(种群尺度)”的缺省值。
注意:初始种群中的所有个体均处于图上右上角的那个象限,也就是说,它们的坐标处于0和1之间,这是因为“Population”选项中的“Initial range(初始范围)”的缺省值是[0; 1]。
如果已知函数的最小点大约位于何处,就可以设置一个适当的“Initial range”,以便使该点处于那个范围的中间附近。例如,如果确信Rastrigin函数的最小值在点[0,0]附近,那么就可以直接设置“Initial range”为[-1;1]。然而,正如本例所显示的那样,即使没有给“Initial range”设置一个理想的值,遗传算法也还是能够找到那个最小值。 8.2.5.3 产生下一代
在每一步,遗传算法使用当前种群来产生子辈,即获得下一代。算法在当前种群中选择一组个体,称为父辈,这些个父辈将其genes——亦即其向量中的项——贡献给它们的子辈。遗传算法通常选择那些具有较好适应度值的个体作为父辈。我们可以在“Selection(选择)”选项的“Selection function(选择函数)”文本框中指定遗传算法用来选择父辈的函数。
遗传算法对于下一代产生三类子辈: ? 优良子辈(Elite children),是在当前代中具有最佳适应度值的那些个体。这些个体子辈存活到下一代。
? 交叉子辈(Crossover children),是由一对父辈向量组合产生的。 ? 变异子辈(Mutation children),是对一个单个父辈引入随机改变即变异产生的。 图8.14表示了这三个类型的子辈。
146
优良子辈 交叉子辈 变异子辈 图8.14 三类子辈
在“8.3.3.5变异与交叉”一节解释如何指定遗传算法产生的每一类子辈的数目,以及用来执行完成交叉和变异的函数。 8.2.5.4 交叉子辈
算法通过组合当前种群中的父辈对(Pair)来产生交叉子辈。在子辈向量的每一个相同位置处,缺省的交叉函数在两个父辈之一的相同位置处随机选择一项,即基因,并将它指派给其子辈。 8.2.5.5 变异子辈
算法通过随机改变个体父辈中的基因而产生变异子辈。按照缺省,算法给父辈增加一个高斯分布的随机向量。
图8.15表示出初始种群的子辈,也即第二代种群,并且指出它们是否为优良子辈、交叉子辈或变异子辈。
147
图8.15 初始种群的子辈
后代图形绘制
图8.16展示出在迭代60次, 80次, 95次, 100次时的种群的图形。 148
8.2.5.6