Python - 求助遗传算法错误

Python - Help on genetic algorithm error

我一直在尝试在 python 中创建遗传算法,但我要么得到:

<bound method Environment.bestsol of <__main__.Environment instance
at 0x10a5d4ab8>>

或者不打印。我尝试重新排列函数,并直接调用函数,但它仍然没有输出任何东西。我似乎遇到了与函数 bestsol().

相关的问题
import random
import sys
from operator import attrgetter
input = 1
target = 5.5
class Individual:
    def __init__(self, constant):
        self.fitness = getfitness()
        self.constant = constant
    def getconstant():
        return self.constant
    def getresult():
        return self.constant * input
    def getfitness():
        return 10 - abs(target - self.getresult())
    def mutate():
        if(random.random() > .05):
            self.constant + random.random()
    def offspring(partner):
        return Individual(((self.getconstant() + partner.getconstant())/2))
class Generation(list):
    def __init__(self, gensize, fitsize, startinglist=[]):
        self.extend(startinglist)
        self.bredoff = []
        self.gensize = gensize
        self.fitsize = fitsize
        self.make()
    def make():
        self = [Individual(random.randint(-10,10)) for x in xrange((self.gensize-len(self)))]

    def getfittest():
        return heapq.nlargest(self.fitsize,self,key=attrgetter('fitness'))
    def getbredoffspring():
        for i in self.getfittest():
            bredoff.append(i.offspring(self.getfittest[random.randint(0,len(self.getfittest()))]))
        return bredoff
class Environment():
    def __init__(self, maxgens):
        self.l = []
        self.b = []
        self.maxgens = maxgens
    def create():
        l = Generation(100,20)
        for i in maxgens:
            b = l.getbredoffspring()
            l = Generation(100,20,b)
    def bestsol():
        print("e")
        print max(l,key=attrgetter('fitness')).fitness()

def main():
    sol = Environment(2)
    print sol.bestsol
if __name__ == '__main__':
    main()

由于我是 python 的新手,即使尽我所能搜索互联网后我也无法理解。任何帮助将不胜感激。

bestsol 是一个 class 方法,所以当你调用它时你应该使用方括号:sol.bestsol()(否则,你将打印方法对象:<bound method Environment.bestsol ... ).

其次,当您定义一个 class 方法时,您应该将 self 声明为一个参数:

def bestsol(self):  # <-- here
    print("e")
    print max(l,key=attrgetter('fitness')).fitness()

第三,当你声明一个不扩展任何其他 class 的 class - 你应该声明它继承自 object (旧方式):

class Environment(object):

或者,完全没有括号(新方式)

class Environment:

第四,当你创建一个 class 成员时,说 l (顺便说一句,你 真的 应该使用更好的名字),无论何时你想使用它你应该使用 self 注释:self.l。如果您将使用 l,它将在方法内创建一个局部变量 - 这可能 不是 您想要的。

代码还有其他问题,但我会让你稍微努力一下,这样你就可以学习:)