训练后将保存的NEAT Python基因组应用于测试环境



我使用了一些NEAT算法来为一些简单的游戏(如flappy bird(编写我自己的AI。一切都很好,我知道发生了什么。问题是我不知道该怎么处理结果。人工智能学到了一些东西,我想保存这些进步。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">

我认为您提供的代码不是您自己的,并且您遵循的是某种教程。代码的质量很低,注释形式的文档根本不存在,变量命名也不是英文的。如果你这样编码,那么对于初学者来说就完全没问题了。事实上甚至令人印象深刻。虽然特别是对于初学者的教程,我强烈建议搜索更好的解释和文档教程。

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

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)

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

无耻的插头:如果你想了解更多关于神经进化的信息,请点击此处:https://towardsdatascience.com/9068f532f7f7

最新更新