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