该算法与轮盘赌选择如何对应?

时间:2019-02-12 17:16:38

标签: genetic-algorithm roulette-wheel-selection

我正在尝试选择轮盘赌。我已经了解了此算法:

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

我不明白的是,这与这样做相反:Roulette wheel selection algorithm (答案为44票)。这对我来说很有意义,但对上面的那个没有意义。

2 个答案:

答案 0 :(得分:0)

在44票的答案中,范围已在0到1之间归一化,这比较容易理解,但需要额外的计算步骤。 您可以实施您提到的方法。在计算总和时,每个单独的染色体都会加上自己的值,因此,当在0和S之间生成一个随机数时,我们假设如果r在2个数字之间,且其范围等于上述值,则使用与适合度成正比的概率。值越大,r进入其范围的可能性越大。 例如,假设当您进行迭代时,适应度为23(假设)的一条染色体是第5条染色体,总和S为130。假设前4条染色体的总和为54。因此,如果随机r为在55至77之间(包括两端),选择了该染色体。 归一化后,55/130〜= 0.423和77/130〜= 0.5923是应该选择该染色体的随机数r2(介于0和1之间)的范围。

答案 1 :(得分:0)

以下是使用总和完成

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]