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

我使用了一些NEAT算法来为像Flappy Bird这样的简单游戏编写自己的AI。一切运行正常,我知道发生了什么。问题是我不知道如何处理结果。AI学到了一些东西,我想保存这些进展。YouTube博主TechwithTim提到可以使用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"):    # 加载所需的NEAT配置    config = neat.config.Config(neat.DefaultGenome, neat.DefaultReproduction, neat.DefaultSpeciesSet, neat.DefaultStagnation, config_path)    # 解封保存的赢家    with open(genome_path, "rb") as f:        genome = pickle.load(f)    # 将加载的基因组转换为所需的数据结构    genomes = [(1, genome)]    # 仅使用加载的基因组调用游戏    game(genomes, config)

显然,由于代码质量较低,我无法理解到足以提供一个干净的重播代码的程度。因此,代码只是简单地重用现有的游戏代码来训练种群,尽管在这种情况下,种群仅由加载的基因组组成。

无耻的推广:如果你想了解更多关于神经进化的知识,请看这里:https://towardsdatascience.com/9068f532f7f7

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注