我有一个对象列表(染色体),它有一个属性适合度(chromosome.fitness 介于 0 和 1 之间)
给定这些对象的列表,我如何实现一个返回单个染色体的函数,该染色体被选中的机会与其适应度成正比?也就是说,适应度为 0.8 的染色体被选择的可能性是适应度为 0.4 的染色体的两倍。
我找到了一些 Python 和伪代码实现,但它们对于这个要求来说太复杂了:该函数只需要一个染色体列表。染色体将自己的适应度存储为内部变量。
我已经编写的实现是在我决定允许染色体存储它们自己的适应度之前,所以要复杂得多,并且涉及压缩列表和其他东西。
- - - - - - - - - - - - - - 编辑 - - - - - - - - - - - --------
谢谢 Lattyware。以下功能似乎有效。
def selectOne(self, population):
max = sum([c.fitness for c in population])
pick = random.uniform(0, max)
current = 0
for chromosome in population:
current += chromosome.fitness
if current > pick:
return chromosome