[英]sort a list of objects and re-index by attribute (fitness) value
在 g.netic 算法中,我有一个由indi
类型的对象表示的候选解决方案的列表indis
(种群)。 为了直接进行选择,我想按适应度值对这些个体进行排序。 一旦排序,他们应该有一个代表他们适应性的新索引。
indi.getFitness() # Returns the fitness.
indi.setId(index) # sets the index
我最初的方法是不够的,因为它不包括排序:
idx=0
for indi in self.indis:
indi.setId(idx)
idx += 1
问题是:如何按适应度排序并重新索引以使最佳解决方案索引为 0?
由于列表带有内置排序方法,因此可以使用 lambda function 调用健身方法getFitness()
。 在这种情况下,使用reverse=True
选项很重要,因为最高适应度意味着最低成本。 重新索引是按照wjandrea的建议实现的。
def sortByFitness(self): # sorted population for single generation
# highest fitness has lowest cost
self.indis.sort(key=lambda x: x.getFitness(), reverse=True)
for idx, indi in enumerate(self.indis):
indi.setId(idx)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.