我目前正在尝试创建一个 NEAT 算法来解决 FlappyBird,但在运行我的代码时遇到错误(参见标题)。目前我已经设置了我的run
功能和我的eval_genomes
功能。我已经简化了它们以删除pygame
并试图将其保留在neat-python
相关位。
我知道有一些方法可以做得更好,但我可以有人帮助找到如何解决我在下面看到的错误。
该错误似乎源于neat-python
模块,但我已卸载并重新安装它,因此该模块没有任何问题。
我运行了别人的代码并且可以正常工作,因此模块似乎工作正常。
def run(config_path):
config = neat.config.Config(neat.DefaultGenome, neat.DefaultReproduction,
neat.DefaultSpeciesSet, neat.DefaultStagnation,
config_path)
p = neat.Population(config)
p.add_reporter(neat.StdOutReporter(True))
stats = neat.StatisticsReporter()
p.add_reporter(stats)
winner = p.run(eval_genomes,20)
def eval_genomes(genomes, config):
run = True
game = Game(WIN)
nets = []
ge = []
birds = []
for g in genomes:
net = neat.nn.FeedForwardNetwork.create(g, config)
nets.append(net)
birds.append(Bird(WIN))
g.fitness = 0
ge.append(g)
while run:
if len(birds) = 0:
run = False
break
for x, bird in enumerate(birds):
bird.move()
ge[x].fitness += 0.1
output = nets[x].activate((bird.y,
abs(bird.y - game.pipes[pipe_ind].height),
abs(bird.y - game.pipes[pipe_ind].bottom)))
if output[0] > 0.5:
bird.jump()
for x, bird in enumerate(birds):
if game.check_collisions(bird):
ge[x].fitness -= 1
birds.pop(x)
nets.pop(x)
ge.pop(x)
if game.pipe_passed(birds[0]):
for g in ge:
g.fitness += 5
game.update() # Move all the other pieces
Traceback (most recent call last):
File "/Users/Ali/Documents/Coding Projects/Python/ToDo/Flappy-Bird-AI/Main.py", line 106, in <module>
run(config_path)
File "/Users/Ali/Documents/Coding Projects/Python/ToDo/Flappy-Bird-AI/Main.py", line 99, in run
winner = p.run(eval_genomes,20)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/neat/population.py", line 89, in run
fitness_function(list(iteritems(self.population)), self.config)
File "/Users/Ali/Documents/Coding Projects/Python/ToDo/Flappy-Bird-AI/Main.py", line 34, in eval_genomes
net = neat.nn.FeedForwardNetwork.create(g, config)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/neat/nn/feed_forward.py", line 33, in create
connections = [cg.key for cg in itervalues(genome.connections) if cg.enabled]
AttributeError: 'tuple' object has no attribute 'connections'