indis在遗传算法中,我有一个由 类型的对象表示的候选解决方案列表(总体) indi。为了使选择更加简单,我想根据适应度值对这些个体进行排序。一旦排序,他们应该有一个代表他们适合度的新索引。indi.getFitness() # Returns the fitness.indi.setId(index) # sets the index我最初的方法是不够的,因为它不包括排序:idx=0for indi in self.indis: indi.setId(idx) idx += 1问题是:如何按适应度排序并重新索引以使最佳解决方案索引为0?
2 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
不,不要使用副作用理解。
但是,您可以使用以下命令使其更干净enumerate
:
for idx, indi in enumerate(self.indis): indi.setId(idx)
慕桂英4014372
TA贡献1871条经验 获得超13个赞
由于列表带有内置排序方法,因此可以使用 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)
添加回答
举报
0/150
提交
取消