繁体   English   中英

对对象列表进行排序并按属性(适应度)值重新索引

[英]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?

不,不要使用对副作用的理解

但是,您可以使用enumerate使其更清晰:

for idx, indi in enumerate(self.indis):
    indi.setId(idx)

由于列表带有内置排序方法,因此可以使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM