1

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

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

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

换句话说,后代中的每个位都有机会根据生成的随机数发生变异,还是只有一个位有变异的机会?

4

1 回答 1

2

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

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

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

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

  • 对于单峰搜索空间,1/L通常建议将其作为良好的突变率(例如,H. Muehlenbein 的“遗传算法如何真正工作:突变和爬山”)。
  • 对于多模式搜索空间,突变率明显高于1/L标准,您的“选项 2”会有一些问题。

“选项 1”更灵活一些,并且遵循最不意外的规则,所以在缺少其他细节的情况下,我会选择它。

于 2016-07-04T09:14:41.583 回答