(μ,λ)进化策略算法中的重现处理是怎样的?
How is reproduce processing in (μ,λ) evolution strategy algorithm?
在(μ,λ)自适应型进化策略算法中,在我的实现中,过程是:
- 我有μ个个体,从这些种群中产生λ个后代
- 在λ个个体中,对变异强度进行变异,然后对候选解进行变异。突变后,评估所有 λ 个体的适应度。
- 选择:对所有λ个个体进行适应度排序,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.
这一步应该在常量内存中完成。
没有释放(删除),没有分配(新)。
在(μ,λ)自适应型进化策略算法中,在我的实现中,过程是:
- 我有μ个个体,从这些种群中产生λ个后代
- 在λ个个体中,对变异强度进行变异,然后对候选解进行变异。突变后,评估所有 λ 个体的适应度。
- 选择:对所有λ个个体进行适应度排序,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.
这一步应该在常量内存中完成。 没有释放(删除),没有分配(新)。