【问题标题】:How is reproduce processing in (μ,λ) evolution strategy algorithm?(μ,λ) 进化策略算法中的重现处理如何?
【发布时间】:2018-01-23 05:58:17
【问题描述】:

在(μ,λ)自适应型进化策略算法中,在我的实现中,过程是:

  1. 我有 μ 个个体,并从这些群体中产生 λ 个后代
  2. 在 λ 个个体中,对突变强度进行突变,然后对候选解进行突变。突变后,评估所有 λ 个个体的适应度。
  3. 选择:将所有λ个个体按适应度排序,选出最好的μ个个体作为下一代种群。如果未达到标准,请返回 1。

在 1. 中,我从 μ 个个体生成后代。当我看到论文时

http://www.cs.bham.ac.uk/~pxt/NIL/es.pdf

http://ieeexplore.ieee.org/document/5596676/

如果似乎我可以通过从 μ 个体克隆并创造后代来获得后代。

但是我怎么能详细地做到这一点呢?我是否应该只克隆具有常数的 μ 个体,并通过 λ = 比例 * μ 得到后代?

但是这样一来,在变异阶段,变异后我不会得到几个相同的结果吗?在选择阶段,我想我可能会以相同的适应度值获得相同的个体。

我怎样才能准确地创建 λ 后代?

【问题讨论】:

    标签: algorithm evolutionary-algorithm


    【解决方案1】:

    我应该只克隆具有常数的μ个体,并通过λ=比例*μ得到后代吗?

    是的,从比例 == 2 开始。你会得到几个相似的个体。 确保只复制 n 个最佳 (n < μ / (3 * proportion)) 个人。因为你将不得不忘记/摧毁 n 个最糟糕的人。

    在变异阶段,变异后我不会得到几个相同的结果吗?

    也许您的错误在于克隆步骤。您必须制作完整副本,而不仅仅是克隆;每个位的真实副本,而不仅仅是指针的副本。请注意,许多 clone 函数不会复制内部引用的对象。 这里的clone这个词,只是与生物学的比较。

    如果您的个人是整数数组,那么您应该有一个整数数组。然后克隆索引i的个体到索引j的另一个个体中,必须以类似的方式完成:

    for(k = 0; k < individuals[i].length; k++)
        individuals[j][k] = individuals[i][k];
    

    算法的第二步将迫使个体以随机方式进化。因此,如果一个组合由多个个体编码,那么它将有更大的进化机会。因此,个人不得共享记忆,以确保多样性占上风。

    ieee文件打不开,需要付费。

    我怎样才能准确地创建 λ 后代?

    sort individuals by fitness from best to worst.
    for( i = 0 ; i < n ; i++) // **n** best
         copy data of individuals[i] into individuals[individuals.length-i] // replace a worst one, by the copy of a good one.
    

    这一步应该在常量内存中完成。 没有释放(删除),没有分配(新)。

    【讨论】:

    • 有些部分我不太理解。在“复制”阶段,如果我用 n 个最好的个体替换 n 个最差的个体,那么我会得到相同大小的 μ 种群。顺便问一下,你知道(μ,λ)型进化策略算法的详细过程的任何来源吗?我想彻底寻找它。非常感谢。
    • 是的,人口规模应该保持不变或几乎不变。我不知道英语进化策略的任何好的来源;也许这个页面:stackoverflow.com/tags/evolutionary-algorithm/info 可能是一个很好的起点。
    猜你喜欢
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2018-10-22
    • 2019-05-11
    • 2023-03-07
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多