【问题标题】:Genetic Algorithms : Roulette wheel selection遗传算法:轮盘赌选择
【发布时间】:2014-05-25 11:41:25
【问题描述】:

我正在尝试实现轮盘选择。我找到了一些伪代码并且我已经实现了它,但是关于 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 会被选中,这会杀死遗传多样性....我理解对了吗?

【问题讨论】:

  • 考虑到人口,我会说G1 赢了,其余的都输了,对吧?如果一个基因组完全没有适应度,你为什么指望它能够存活?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 是的。还有其他可以使用的选择机制。我在比赛选择方面有很好的经验。
    猜你喜欢
    • 2010-09-15
    • 2011-05-02
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2018-04-13
    • 2012-09-28
    相关资源
    最近更新 更多