应该如何赌轮选择在遗传算法的非排序人口组织?(How should roulette wheel s

2019-06-24 07:46发布

:我的问题是这一个链接在遗传算法轮盘轮的选择。 人口需要先排序? 如果我们没有人口排序是什么组织轮盘赌选择它的方法是什么? 当然,我们有线性的方式,现在进行查询。 你有没有在C ++这种情况下,任何代码片段或Java?

Answer 1:

人口并不需要在所有进行排序 - 关键轮盘赌选择是被选中某一个人的概率再现正比于它的健康。

假设你有一个未排序的人口,适应度如下:

[12, 45, 76, 32, 54, 21]

为了执行轮盘赌选择,你只需要挑选在0〜240(占总人口的健身之和)范围内的随机数。 然后,开始在该列表中的第一个元素,每个减去个体的适应度,直到随机数小于或等于零。 因此,在上述情况下,如果我们随机选择112,我们做到以下几点:

Step 1: 112 - 12 = 100. This is > 0, so continue.
Step 2: 100 - 45 = 55.  This is > 0, so continue.
Step 3: 55 - 76 = -21.  This is <= 0, so stop.

因此,我们选择单独的#3再现。 请注意这是如何并不需要在所有要排序的人口。

所以,在伪代码,它归结为:

let s = sum of population fitness
let r = random number in range [0, s].
let i = 0.
while r > 0 do:
    r = r - fitness of individual #i
    increment i
select individual #i - 1 for reproduction.

需要注意的是- 1的最后一行是来抵消increment i这就是循环的最后一次迭代中完成的(因为即使我们找到我们想要的个体,它增加不分)。



文章来源: How should roulette wheel selection be organized for non-sorted population in genetic algorithm?