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

indis在遗传算法中,我有一个由 类型的对象表示的候选解决方案列表(总体) indi。为了使选择更加简单,我想根据适应度值对这些个体进行排序。一旦排序,他们应该有一个代表他们适合度的新索引。


indi.getFitness()  # Returns the fitness.

indi.setId(index)  # sets the index

我最初的方法是不够的,因为它不包括排序:


idx=0

for indi in self.indis: 

    indi.setId(idx)

    idx += 1

问题是:如何按适应度排序并重新索引以使最佳解决方案索引为0?


繁星淼淼
浏览 89回答 2
2回答

尚方宝剑之说

不,不要使用副作用理解。但是,您可以使用以下命令使其更干净enumerate:for idx, indi in enumerate(self.indis):     indi.setId(idx)

慕桂英4014372

由于列表带有内置排序方法,因此可以使用 lambda 函数调用fitness 方法getFitness()。在这种情况下,使用该reverse=True选项很重要,因为最高的适应度意味着最低的成本。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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python