问题
I'm currently trying to create a NEAT algorithm to solve FlappyBird but am coming across an error while running my code (see title). Currently I have set up my run
function and my eval_genomes
functions. I've simplified them to remove the pygame
stuff and tried to keep it just to the neat-python
relevant bits.
I know there are ways I could make this better, but I can someone help in finding how to solve the error I'm seeing below.
The error seems to stem from the neat-python
module, but I've uninstalled and reinstalled it so there isn't anything wrong with the module.
I've run someone else's code and there's works so again module seems to work fine.
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'
来源:https://stackoverflow.com/questions/65524441/neat-error-attributeerror-tuple-object-has-no-attribute-connections