我正在尝试实施轮盘赌选择。我发现了一些伪代码,但是我已经实现了它,但是对于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来杀死遗传多样性....我明白了吗?
答案 0 :(得分:4)
是的,你已经理解正确了。如果你想拥有更好的多样性,你应该给予个人部分信用,而不仅仅是零,当他们不是很好。
实现这一目标的一种简单方法是计算个人的错误,然后让适应度为1 /(1 +错误)。但只是找到一种方法给你的个人一些点可以解决你的问题。
您可能还想了解缩放适合度值。现在选择的机会与适应度成正比。
答案 1 :(得分:1)
你已经理解正确了。如上面的答案所述,改变适应度函数以使0不可能是一个很好的解决方案。一般来说,有了这种类型的问题,轮盘选择不是最好的选择。
如果您使用遗传算法,其中某些人口的得分为0,但您仍希望将其纳入选择过程,则应考虑使用不同的选择方法。基于排名的轮盘选择方法可以更好地适应问题。它不仅可以为每个基因组提供选择的可能性,而且还可以阻止异常值控制轮盘赌。
与大多数遗传算法的实现一样,您的选择会受到问题的严重影响。有时你想要从人群中剔除一个健康状态为0的基因组,然后你就可以使用如上所述的轮盘选择。