【问题标题】:Applying saved NEAT-Python Genome to test environment after training训练后将保存的 NEAT-Python 基因组应用于测试环境
【发布时间】:2020-04-22 12:54:27
【问题描述】:

我已经使用了一些 NEAT 算法来编写我自己的 AI 代码,用于一些简单的游戏,比如 Flappy Bird。一切正常,我知道发生了什么。问题是我不知道如何处理结果。人工智能学到了一些东西,我想保存那个进步。 TechwithTim YouTuber 说了一些关于使用 pickle 的内容,当我保存它时它对我很有用。我什至可以从文件中加载它,但这就是我结束的地方。我不知道下一步该怎么做,只开始一只鸟来玩游戏,而在他之前玩游戏的那些鸟的知识。

保存在一个代码中

winner = p.run(game,50)
with open("winner.pkl", "wb") as f:
    pickle.dump(winner, f)
    f.close()

在另一个代码中打开:

with open("winner.pkl", "wb") as f:
    genome = pickle.load(f)

使用时

print(type(genome))

输出是

<class "neat.genome.DefaultGenome">

【问题讨论】:

  • 看起来您已成功保存并加载了基因组。您现在的问题是如何将保存在该基因组中的神经网络再次应用到测试环境中。如果您上传一个链接到您训练人口(基因组集合)的代码,我可以指出您将基因组应用于测试环境的部分。然后,您必须使用所选的获胜者基因组简单地重复此代码结构。

标签: python artificial-intelligence neat


【解决方案1】:

我假设您提供的代码不是您自己的,并且您正在学习某种教程。代码的质量非常低,cmets 形式的文档实际上是不存在的,变量命名不是英文的。如果您编写了代码,那么对于初学者来说这完全没问题。实际上甚至令人印象深刻。虽然特别是对于初学者的教程,但我强烈建议您搜索更好的解释和文档教程。

话虽如此,以下是您需要添加到项目中以重放保存的基因组的代码:

def replay_genome(config_path, genome_path="winner.pkl"):
    # Load requried NEAT config
    config = neat.config.Config(neat.DefaultGenome, neat.DefaultReproduction, neat.DefaultSpeciesSet, neat.DefaultStagnation, config_path)

    # Unpickle saved winner
    with open(genome_path, "rb") as f:
        genome = pickle.load(f)

    # Convert loaded genome into required data structure
    genomes = [(1, genome)]

    # Call game with only the loaded genome
    game(genomes, config)

显然,由于代码质量非常低,我无法理解到提供干净重放代码的程度。因此,代码只是重用现有的游戏代码来训练种群,尽管在这种情况下种群仅包含加载的基因组。

无耻插件:如果您想了解有关 Neuroevolution 的更多信息,请参阅此处: https://towardsdatascience.com/9068f532f7f7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2015-05-25
    • 2021-03-14
    • 1970-01-01
    • 2017-10-09
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多