在稳态遗传算法中应用变异

时间:2011-03-17 14:29:39

标签: genetic-algorithm genetic-programming evolutionary-algorithm mutation

我正在实施稳态遗传算法来执行符号回归。

我的问题是关于突变和交叉算子之间的关系。

我总是在应用变异和锦标赛选择之前咨询变异概率(Pm),以根据错误选择父母。

  • 第一个问题:

变异必须仅适用于交叉后获得的儿童(或其他遗传算子) 或者可以直接应用于1父母以生成新的个体?

  • 第二个问题:

交叉手术后获得的儿童必须经常尝试突变(当然还有Pm)?

提前谢谢大家。

3 个答案:

答案 0 :(得分:4)

通常交配过程包括交叉和变异,所以为了回答你的问题,一个标准的方法是采取父母,交叉申请,然后改变最终结果(在称之为孩子之前)。

这样做的原因是,如果你对父母应用突变,那么基本上“过多的突变”正在发生(假设突变率是相同的,你就会把东西加扰的几倍加倍)。

即使我从未见过这样做,当然你也可以这样做,但你必须'重新缩放'突变,这样才不会对进化过程造成破坏(过多的突变 - >随机游走)。

我曾经用过的所有标准进化率都是给孩子的,所以这是另一个原因。

答案 1 :(得分:0)

在每种情况下,您都可以这样做。不同的交叉和变异方案可能适用于不同的问题;尝试各种各样的问题,看看他们的表现如何。 (但是当然如果你(1)说变异只适用于交叉后的孩子,(2)说交叉后的孩子不变异,那么结果是你没有变异:-),所以这个组合是可能不是一个好的。)

答案 2 :(得分:0)

正如其他答案中所提到的,任何一种方法都是可用的,我看到它们都在实践中实现。这是一个设计选择。但是,话虽如此,我想说服你,最好一次只执行一次遗传操作。

大多数时候,对于遗传算子来说,高“局部性”的特性是理想的。局部性是指操作员对个体的影响是如何局部化的 - 它是否从根本上改变了它,或者它是否只做了一个小的调整,将个体轻推到搜索空间中的相邻位置。具有低局部性的操作员在搜索空间中产生大量不相关的跳跃,这使得难以逐步进行,而是依赖于幸运的罢工。如果要在一个步骤中应用交叉和变异,则可以有效地组合这些更改,从而创建比单独应用更低位置的操作。

有些时候你可能会想要这个,但通常情况下只有在健身状况如此崎岖的情况下,进化算法可能是错误的方法。