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

问题描述 投票:0回答:2

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

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

我不明白的是这对应于这样做:Roulette wheel selection algorithm(44票的回答)。这对我有意义,但不是上面的那个。

genetic-algorithm roulette-wheel-selection
2个回答
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]

0
投票

在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之间)的范围。

© www.soinside.com 2019 - 2024. All rights reserved.