NEAT 错误 - AttributeError:“tuple”对象没有属性“connections”

2024-01-09

我目前正在尝试创建一个 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'

这已经很晚了,但我刚刚遇到了这个问题,过了一会儿我就解决了。我想我会在这里为将来遇到此问题的其他人发布解决方案。你的问题是当你解压基因组时。

for g in genomes:
    net = neat.nn.FeedForwardNetwork.create(g, config)
    nets.append(net)
    birds.append(Bird(WIN))
    g.fitness = 0
    ge.append(g)

为了正确解包基因组,必须将其解包为 2 个独立的对象基因组和基因组 ID,如下所示:

for genome_id, g in genomes:
    net = neat.nn.FeedForwardNetwork.create(g, config)
    nets.append(net)
    birds.append(Bird(WIN))
    g.fitness = 0
    ge.append(g)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NEAT 错误 - AttributeError:“tuple”对象没有属性“connections” 的相关文章

随机推荐