这个算法如何对应轮盘赌的选择?

How does this algorithm corresponds to the roulette wheel selection?

我正在尝试实施轮盘赌选择。我已经理解了这个算法:

  1. 计算种群中所有染色体适应度的总和S
  2. 从区间 (0,S) 生成一个随机数 r
  3. 遍历种群并对从 0 到 S 的适应度求和,这 是部分和,称它为 P.
  4. 当P > S:停止并return对应的染色体。

我不明白这是如何对应于这样做的:Roulette wheel selection algorithm (44票的答案)。这对我来说很有意义,但上面的不是。

在44票的答案中,范围被归一化为0到1之间,这更容易理解,但需要额外的计算步骤。

您可以实施您提到的方法。因为在计算总和时,每个染色体都会添加自己的 value,因此当在 0 和 S 之间生成随机数时,我们假设如果 r 在 2 个数字之间,其范围等于上述 value,它的选择概率与其适应度值成正比。值越大,r 进入其范围的概率就越大。

例如,假设适应度为 23 的染色体(假设)是迭代时的第 5 条染色体,总和 S 为 130。前 4 条染色体的总和为 54。因此,如果 random r 在 55 和 77 之间(包括两者),则选择此染色体。

归一化后,55/130 ~= 0.423 和 77/130 ~= 0.5923 是随机数 r2(介于 0 和 1 之间)应该属于要选择的染色体的范围。

下面是使用总和

def choose_parent_using_RWS(genes, S, points):
    P = randint(0, int(S))
    for x in genes:
        P += evaluate(x, points)
        if P > S:
            return x
    return genes[-1]

以下是通过在 0 和 1 之间进行归一化来完成的

def choose_parent_using_RWS(genes, S, points):
    P = randint(0, int(S))/S
    for x in genes:
        P += evaluate(x, points)/S
        if P > S/S:
            return x
    return genes[-1]