NEAT Error - AttributeError: 'tuple' object has no attribute 'connections'

大憨熊 提交于 2021-01-28 21:53:32

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!