这个算法如何对应轮盘赌的选择?
How does this algorithm corresponds to the roulette wheel selection?
我正在尝试实施轮盘赌选择。我已经理解了这个算法:
- 计算种群中所有染色体适应度的总和S
- 从区间 (0,S) 生成一个随机数 r
- 遍历种群并对从 0 到 S 的适应度求和,这
是部分和,称它为 P.
- 当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]
我正在尝试实施轮盘赌选择。我已经理解了这个算法:
- 计算种群中所有染色体适应度的总和S
- 从区间 (0,S) 生成一个随机数 r
- 遍历种群并对从 0 到 S 的适应度求和,这 是部分和,称它为 P.
- 当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]