训练后将保存的 NEAT-Python 基因组应用到测试环境
Applying saved NEAT-Python Genome to test environment after training
我已经使用一些 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">
我假设您提供的代码不是您自己的,并且您正在学习某种教程。代码质量很低,评论形式的文档几乎不存在,变量命名也不是英文。如果您编写了该代码,那么对于初学者来说完全没问题。实际上甚至令人印象深刻。虽然特别是对于初学者教程,我强烈建议搜索更好解释和记录的教程。
话虽如此,这里是您需要添加到项目中以重播已保存基因组的代码:
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
我已经使用一些 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">
我假设您提供的代码不是您自己的,并且您正在学习某种教程。代码质量很低,评论形式的文档几乎不存在,变量命名也不是英文。如果您编写了该代码,那么对于初学者来说完全没问题。实际上甚至令人印象深刻。虽然特别是对于初学者教程,我强烈建议搜索更好解释和记录的教程。
话虽如此,这里是您需要添加到项目中以重播已保存基因组的代码:
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