2

我正在尝试实现轮盘赌选择。我找到了一些伪代码并且我已经实现了它,但是关于 0 适应度的基因组,我有些不明白。

我发现的伪代码是这个

for each genome in population:
    totalFitness = totalFitness + genome.fitness

x = random(0, totalFitness) 

currentCount = 0

for each genome in population:
    currentCount = currentCount + genome.fitness
    if currentCount >= x:
        parent = genome
        break

我担心的是:假设我有 5 个基因组,它们的适应度如下

G1 = 11
G2 = 0
G3 = 0
G4 = 0
G5 = 0

根据上面的算法,肯定只有 G1 会被选中,这会杀死遗传多样性......我理解对了吗?

4

2 回答 2

4

是的,你理解正确。如果你想拥有更好的多样性,你应该给个人部分功劳,而不是在他们不是很好的时候归零。

实现这一点的一种简单方法是计算个体的错误,然后让适应度为 1/(1+Errors)。但只要找到一种方法给你的个人一些分数就可以解决你的问题。

您可能还想研究调整适应度值。现在选择的机会与适应度成正比。

于 2014-04-11T10:57:43.117 回答
1

你理解正确。正如上述答案所述,改变适应度函数以使 0 不可能是一个很好的解决方案。不过,一般来说,对于这类问题,轮盘赌的选择并不是最佳选择。

如果您使用的遗传算法中某些总体得分为 0,但您仍希望将它们包括在选择过程中,则应考虑使用不同的选择方法。基于等级的轮盘赌选择方法更适合这个问题。它不仅会为每个基因组提供选择的可能性,而且还会阻止异常值主导轮盘赌。

与大多数遗传算法的实现一样,您的选择受到问题的严重影响。有时您希望从种群中剔除适合度为 0 的基因组,然后您将使用上述轮盘赌选择。

于 2014-04-22T14:53:55.070 回答