今天和大家分享一下我的知识,对拳皇2002rom也会有帮助(用python构建拳皇97视频游戏,不信有开源API?先看我玩八神庵。)来说明一下,如果你恰好正在解决你的问题,别忘了关注这个网站,所以现在就开始吧。
编者按:近年来,虽然关于强化学习进展的新闻屡见报端,也有不少人对强化学习感兴趣,但对于普通学习者来说,要真正做出一个自己感兴趣的强化学习项目,还是太麻烦了。今天伦智推荐的Python库是一个网友的开源库。它提供了一个可以玩任何老版本街机游戏的API,操作方式非常亲民。
Python入门其实很简单,但是要不断学习。每天坚持学习很难。相信很多人学了一个星期就放弃了。为什么?其实没有什么好的学习资料让你学习,你也很难坚持下去。这是边肖收集的Python入门学习资料。关注他们,转发他们,免费送给边肖“01”!希望对你有帮助。
这是一个Python库,允许你在几乎任何街机游戏中训练你的强化学习算法。它目前在Linux上可用。通过这个工具包,你可以自定义算法来一步步完成游戏,同时接收每一帧的数据和内存的地址值来跟踪游戏状态,发送与游戏交互的动作。
安装
您可以使用pip安装该库,只需运行以下命令:
演示示例:街霸
在街机爱好者心中,《街霸》是史上最经典的游戏之一。现在工具包里收录的街霸版本是《街霸3:第三次冲击》(日本990608,无光盘)。我们以此为例,用下面的代码写一个随机代理:
这个工具包还支持hogwild!训练:
什么是猪猡!牛等人介绍了一个叫Hogwild!更新策略可以在多个CPU上并行进行SGD更新。处理器可以在不锁定参数的情况下访问共享存储器。但它只在输入数据稀疏时有效,因为每次更新只修改所有参数的一小部分。他们表明,在这种情况下,更新策略几乎可以达到一个最优的收敛速度,因为处理器不可能覆盖有用的信息。
建立自己的游戏环境
这个工具包很容易使用,因为它不需要与模拟器本身进行太多的交互。只需注意两点:一是找到与你所关注的内部状态相关联的内存地址值,二是用所选环境跟踪状态。你可以使用MAME作弊调试器,它会反馈游戏的内存地址值如何随时间变化。如果你想创建一个游戏模拟,你必须首先获得被模拟游戏的ROM,并且知道MAME使用的游戏ID,比如《街头霸王》的ID是‘sfiii3n’。
游戏ID
你可以通过运行以下代码找到游戏的ID:
这个命令将打开MAME模拟器。你可以搜索游戏列表找到你想要的游戏。游戏ID在游戏标题末尾的括号里。
内存地址
如果您获得了ID和想要跟踪的内存地址,就可以开始模拟了:
这将启动模拟器,并在工具箱连接到模拟器进程时暂停。
分步运行仿真器
连接工具箱后,你可以分步运行仿真器:
step函数会以NumPy矩阵的形式返回帧数据,同时也会返回这个时间步长的内存地址的所有整数值。
如果要将动作输入模拟器,还需要确定游戏支持的输入端口和字段。比如玩街霸,需要先投币。这个代码是:
要确定哪些端口可用,请使用list actions命令:
以下返回的列表包含所有可用于向Street Fighter环境中的step函数发送动作的端口和字段:
仿真器还有一个frame_ratio参数,可以用来调整算法看到的帧速率。默认情况下,MAME以每秒60帧的速率生成帧。如果你觉得这个太多了,想改成每秒20帧,可以输入以下代码:
MAME性能基准测试
目前,该工具包的开发和测试已经在8核AMD FX-8300 3.3GHz CPU和3GB GeForce GTX 1060 GPU上完成。使用单个随机代理,街头霸王环境可以以正常游戏速度的600%运行。如果是8个随机代理的猪猡!训练,环境能以正常游戏速度的300%运行。
ConvNet智能体
为了保证工具包可以训练算法,作者还搭建了一个简单的5层ConvNet,你只需要做一些调整就可以测试。在街霸的实验中,这个算法可以成功学习游戏的一些简单技能,比如连击和拦网。街霸本身的游戏机制分为10级(难度递增),玩家在每一级都要面对不同的对手。一开始这个代理平均只能打到2级。但经过2200次训练,平均能打到第五级。
至于代理的学习率,是通过代理在每场比赛中造成的净伤害和所受伤害来计算的。