python - 训练后将保存的 NEAT-Python 基因组应用于测试环境
问题描述
我已经使用了一些 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
推荐阅读
- typescript - Typescript + Karma + Fetch Mock
- go - 在 Go 中指定用于查找的 DNS 服务器
- python - 有没有办法使用带有固定 Mtime 注释的 Jython 将 .py 文件编译成 $py.class 文件,以实现可重现的构建?
- python - 用于检查值是否在列表中的逻辑不适用于 set
- python - 如何让 cv2.imshow() 显示列表中的帧?
- python - 调用 Google Maps api 的 Python 程序在 urllib.urlencode 处给出错误
- performance - Powershell 问题 - 寻找最快的方法来遍历 500k 对象以在另一个 500k 对象数组中寻找匹配项
- c++ - c ++模板实现带递归的循环
- java - 任何人都可以帮助调试我的简单 Java 计算器吗?
- python - 在python中格式化输入提示