提问者:小点点

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


我有一个关于遗传算法中变异的抽象问题。我不包括任何独立于编码环境的代码片段来询问我的问题。

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

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

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


共1个答案

匿名用户

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

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

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

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

  • 对于单峰搜索空间,1/L通常被认为是一个好的变异率(例如H.Muehlenbein的“遗传算法的真正工作原理:变异和山岭限制”)
  • 对于多模式搜索空间,变异率明显高于1/L是标准,您的“选项2”可能会有一些问题

“选项1”更灵活一点,遵循最小惊喜规则,所以如果没有其他细节,我会选择它。