遗传算法:轮盘赌选择

时间:2014-04-11 10:50:21

标签: algorithm genetic-algorithm genetic-programming roulette-wheel-selection

我正在尝试实施轮盘赌选择。我发现了一些伪代码,但是我已经实现了它,但是对于0适应度的基因组,我有一些我不理解的东西。

我找到的psudocode就是这个

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来杀死遗传多样性....我明白了吗?

2 个答案:

答案 0 :(得分:4)

是的,你已经理解正确了。如果你想拥有更好的多样性,你应该给予个人部分信用,而不仅仅是零,当他们不是很好。

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

您可能还想了解缩放适合度值。现在选择的机会与适应度成正比。

答案 1 :(得分:1)

你已经理解正确了。如上面的答案所述,改变适应度函数以使0不可能是一个很好的解决方案。一般来说,有了这种类型的问题,轮盘选择不是最好的选择。

如果您使用遗传算法,其中某些人口的得分为0,但您仍希望将其纳入选择过程,则应考虑使用不同的选择方法。基于排名的轮盘选择方法可以更好地适应问题。它不仅可以为每个基因组提供选择的可能性,而且还可以阻止异常值控制轮盘赌。

与大多数遗传算法的实现一样,您的选择会受到问题的严重影响。有时你想要从人群中剔除一个健康状态为0的基因组,然后你就可以使用如上所述的轮盘选择。