2016-12-02 27 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'是否是一个新对象。您的列表中的所有对象“神奇地”呈现最后一个值强烈表明它们都是同一个对象。 –