【问题标题】:Applying mutation in steady-state genetic algorithm在稳态遗传算法中应用变异
【发布时间】:2011-03-18 18:03:10
【问题描述】:
我正在实现一个稳态遗传算法来执行符号回归。
我的问题是关于变异和交叉运算符之间的关系。
在应用突变和锦标赛选择之前,我总是会咨询突变概率 (Pm),以根据错误选择父母。
突变必须仅应用于交叉后获得的孩子(或其他遗传算子)
或者可以直接应用于 1 父级以生成新个体?
交叉操作后获得的孩子必须总是尝试突变(当然是Pm)?
提前谢谢大家。
【问题讨论】:
标签:
genetic-algorithm
genetic-programming
evolutionary-algorithm
mutation
【解决方案1】:
通常交配过程包括交叉和变异,因此回答您的问题的标准方法是获取父母,应用交叉,然后才对最终结果进行变异(在称其为孩子之前)。
这样做的原因是,如果您对父母应用突变,基本上会发生“太多突变”(假设突变率相同,您将加倍的东西被打乱的机会)。
即使我从未见过这样的做法,你当然可以这样做,但你必须“重新调整”突变,以免对进化过程造成破坏(太多的突变 --> 随机游走)。
我曾经用作参考的所有标准进化速率都是在孩子身上给出的,所以这是另一个理由。
【解决方案2】:
在每种情况下,您都可以做到。不同的交叉和变异方案可能适用于不同的问题;针对您的问题尝试各种方法,看看它们的表现如何。 (但当然,如果你(1)说突变只应用于交叉后的孩子,(2)说交叉后的孩子不突变,那么结果就是你没有突变:-),所以组合是可能不太好。)
【解决方案3】:
正如在其他答案中提到的,这两种方法都是可用的,我已经看到这两种方法都在实践中实现了。这是一种设计选择。但是,话虽如此,我想说服你,最好一次只进行一次基因手术。
大多数时候遗传算子都需要高“局部性”的属性。局部性是指操作员对个人的影响的本地化程度——它是从根本上改变它,还是只进行小的调整,将个人推到搜索空间中的相邻位置。局部性低的算子会在搜索空间中产生较大的不相关跳跃,难以渐进,而是依靠幸运打击。如果您要在一个步骤中应用交叉和变异,那么这些更改会被有效地组合在一起,从而创建一个比单独应用它们的局部性更低的操作。
有时您可能会选择这样做,但通常仅在适应度环境如此崎岖以至于进化算法可能是错误的方法的情况下。