gpt4 book ai didi

Python - 遗传算法错误的帮助

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:06 25 4
gpt4 key购买 nike

我一直在尝试在 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是一个类方法,所以当你调用它时你应该使用方括号:sol.bestsol() (否则,您将打印方法对象:<bound method Environment.bestsol ...)。

其次,当你定义一个类方法时,你应该声明 self作为论据:

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

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

class Environment(object):

或者,根本没有括号(新方式)

class Environment:

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

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

关于Python - 遗传算法错误的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35249998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com