【问题标题】:how to mutate offspring in genetic algorithm?如何在遗传算法中突变后代?
【发布时间】:2016-11-04 20:30:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这取决于。是任何突变的概率还是每个突变的概率?
  • 这是一个设计选择。一个可能会胜过另一个。
  • 亲爱的 jonrsharpe 我没有完全理解您的问题,但为了您的信息,我将突变率设置为 0.001 。我在 for 循环中生成一个随机数,如果生成的随机数低于此突变率,则切换位。这意味着所有位都有变异的机会。
  • 两种选择都可以。使用效果最好的那个。
  • @MohammadAsasi 我投票结束这个问题过于宽泛,没有指定问题域编码含义概率 对于每个事件,您的问题都没有特定的答案。您在遗传算法中所做的工作很大程度上取决于这些元素,而您没有提供任何元素。

标签: genetic-algorithm mutation


【解决方案1】:

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

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

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

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

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

“选项 1”更灵活一些,并且遵循rule of least surprise,所以缺少其他细节,我会选择它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2012-02-23
    • 2019-01-12
    • 2017-08-27
    • 1970-01-01
    • 2020-07-20
    • 2013-02-15
    相关资源
    最近更新 更多