在遗传算法中,对于非排序群体,应该如何组织轮盘选择

How should roulette wheel selection be organized for non-sorted population in genetic algorithm?

本文关键字:何组织 选择 遗传算法 于非 排序      更新时间:2023-10-16

我的问题与此有关:遗传算法中的轮盘选择。人口需要先分类吗?如果我们不对人口进行排序,那么组织轮盘赌选择的方法是什么?当然,我们现在必须以线性方式搜索。在这种情况下,您是否在 C++ 或 Java 中有任何代码片段?

种群根本不

需要排序 - 轮盘赌选择的关键是给定个体被选中进行繁殖的概率与其适应性成正比。

假设您有一个未分类的人口,其健康状况如下:

[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(因为即使我们找到了我们想要的个人,它无论如何都会递增(。