如何在遗传算法中改变后代?

时间:2016-07-02 16:22:23

标签: genetic-algorithm mutation

我有一个关于遗传算法突变的抽象问题。我没有包含任何代码片段来独立于编码环境提出我的问题。

我正在编写遗传算法代码,但我不知道如何实现变异。假设一个将要变异的后代是一个像10110011110101000111这样的长度为20的字符串。

突变必须以非常小的概率进行,例如0.001。我们产生一个介于0和1之间的随机数,然后我们决定是否应该改变后代。我的问题是,我们必须生成20个随机数,并为这个后代的每20位做出有关变异的决定吗?或者我们必须为整个后代只生成一个随机数并随机切换一下?

换句话说,后代中的每个位是否有机会根据生成的随机数进行变异,或者只有一位有可能发生突变?

1 个答案:

答案 0 :(得分:2)

“传统上”变异率pmutation(David E Goldberg的“搜索,优化和机器学习中的遗传算法”)是衡量染色体的随机元素将被翻译成其他东西的相似度(你的“选项1”)。

即。如果你的染色体被编码为长度为1000且pmutation为1%(0.01)的二进制字符串,则意味着1000个(平均)中的10个将被翻转。

尽管可以避免很多随机数生成决定何时应该发生下一个突变(而不是每次都调用RNG),但实现起来有点复杂。为了避免复杂的细节,许多实现都使用“选项2”。

考虑一下,如果L是二进制染色体的长度:

  • 对于单峰搜索空间,1/L通常被认为是一种很好的突变率(例如H. Muehlenbein的“遗传算法如何真正起作用:突变和爬山”)。
  • 对于多模式搜索空间,突变率明显高于1/L是标准,而您的“选项2”会出现一些问题。

“选项1”更灵活,跟随rule of least surprise,所以缺少其他细节,我会选择它。