indis在遺傳算法中,我有一個由 類型的對象表示的候選解決方案列表(總體) indi。為了使選擇更加簡單,我想根據(jù)適應度值對這些個體進行排序。一旦排序,他們應該有一個代表他們適合度的新索引。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 函數(shù)調用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
提交
取消