(μ,λ)进化策略算法中的重现处理是怎样的?

How is reproduce processing in (μ,λ) evolution strategy algorithm?

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

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

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

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

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

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

但是我该如何详细说明呢?我是否应该只克隆具有常数的 μ 个个体,并通过 λ = 比例 * μ 获得后代?

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

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

Should I just clone the μ individuals with a constant, and get offspring by λ = proportion * μ ?

是的,从 proportion == 2 开始。你会得到几次相似的个体。 确保只复制 n 个最佳 (n < μ / (3 * proportion) ) 个人。因为你将不得不 forget/destroy n 个最差的人。

in the mutation phase, won't I get several same result after mutation?

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

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

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

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

ieee文档打不开,需要付费

How could I create the λ offspring exactly?

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.

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