为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星淼淼 2023-10-26 10:29:11
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)


查看完整回答
反对 回复 2023-10-26
?
慕桂英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)


查看完整回答
反对 回复 2023-10-26
  • 2 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信