2016-12-02 32 views
-6

我有以下問題: 對於遺傳算法我要創建5個突變,並將它們存儲在一份清單(見下面的代碼)。追加不工作像預期

這是我的職責,我想追加突變司機:

def startNewRunFromScratch(self): 
    self.log.logBlue('Starting new run from scratch', 2, 0) 
    parameterSet = [] 
    parameterSet.append(Parameter('TEST', 0.5, 0, 1)) 

    defaultGDriver = GDriver(parameterSet) 
    gDriverList = [] 
    gDriverList.append(defaultGDriver) 
    m = Mutation(self.mutationRate) 
    for i in range(1, self.populationSize, 1): 
     g = m.mutate(defaultGDriver) 
     self.log.log('After mutaion: '+str(g.parameterSet[0].value), 0, 2) 
     gDriverList.append(g) 
    self.startSuite(gDriverList) 

而這裏的startSuite函數原型:

def startSuite(self, gDriverList): 
    self.log.logSuccess('Starting suite', 1, 0) 
    for g in gDriverList: 
     self.log.log('Inside suite: '+str(g.parameterSet[0].value), 0, 2) 

的問題是,輸出不匹配我的邏輯:

Starting new run from scratch 
     After mutaion: 0.5 
     After mutaion: 0.5 
     After mutaion: 0.5 
     After mutaion: 0.740296236666 

Starting suite 
     Inside suite: 0.740296236666 
     Inside suite: 0.740296236666 
     Inside suite: 0.740296236666 
     Inside suite: 0.740296236666 
     Inside suite: 0.740296236666 

預期產出:

Inside suite: 0.5 
Inside suite: 0.5 
Inside suite: 0.5 
Inside suite: 0.5 
Inside suite: 0.740296236666 

沒有人有一個好主意,如何解決這個問題呢?也許我錯過了一些東西。

回答

1

您多次追加相同Mutation,並在列表中也多次引用結束。如果你想要不同的Mutations,你必須做出新的。 (我認爲這就是你認爲的「問題​​」,因爲你從未明確地說出輸出有什麼問題。)

+0

with m.mutate()我創建了新的。請參閱日誌突變 – johni07

+0

後@ johni07:它記錄g'的'當前值;它不會告訴你'g'是否是一個新對象。您的列表中的所有對象「神奇地」呈現最後一個值強烈表明它們都是同一個對象。 –