:我的问题是这一个链接在遗传算法轮盘轮的选择。 人口需要先排序? 如果我们没有人口排序是什么组织轮盘赌选择它的方法是什么? 当然,我们有线性的方式,现在进行查询。 你有没有在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?