模型训练 python_我用python训练了一个拳皇模型,从此在各地游戏厅再也没输过!...

本文介绍了如何利用Python库在Linux系统上通过MAME模拟器对《街头霸王3》进行强化学习算法训练。该库支持定制算法执行游戏并获取帧数据和内存地址,允许开发者进行游戏状态跟踪和交互。文章提供了安装、设置及随机智能体示例,并提及了使用MAME调试器来识别内存地址。此外,还讨论了帧率调整和性能基准测试。
摘要由CSDN通过智能技术生成

6f59d5a2219331a481353458ad8915c2.gif

6b1e33a60425c8a18b4455979b32038f.png

从世界瞩目的围棋游戏 AlphaGo

3792b1b4779d646dca659254c914c9ab.png

0f4ed771b112ee4956ee83fda7a61cb9.png

76549b8290f86634216910475638ade2.gif

突然袭来的回忆杀~

今天为大家介绍一个在街机游戏《街头霸王 3》中进行模拟来训练改进强化学习算法的工具包。不仅在 MAME 游戏模拟器中可以使用,这个 Python 库可以在绝大多数的街机游戏中都可以训练你的算法。

73a315dba8937a1168763b2fd2495b42.gif

510e4300465a63d93ff48a3f711b13d8.gif

下面营长就从安装、设置到测试分步为大家介绍一下。

目前这个工具包支持在 Linux 系统,作为 MAME 的包装器来使用。通过这个工具包,你可以定制算法逐步完成游戏过程,同时接收每一帧的数据和内部存储器的地址值来跟踪游戏状态,以及发送与游戏交互的动作。

首先你需要准备的是:

  • 操作系统:Linux

  • Python 版本:3.6+

▌安装

你可以使用 pip 来安装该库,运行下面的代码:

2e3f857d252f5906dedcca14e8bac86f.png

▌《街头霸王3》示例

0827d58fed7305dec258d63a8b158f78.png

下面的代码演示了如何在街头霸王的环境下编写一个随机智能体。

d702f3d7c9f3bd80d8caf006d245820c.png

此外,这个工具包还支持 hogwild 训练:

7755f0d3b99bf471917831048977db45.png

47d23dde93d811858fc320934515f4c6.gif

6c4d9cb51c81a1ec1ea8838bda61fb17.gif

▌游戏环境设置

  • 游戏 ID

1750c4395fe55737dd9aa2309884a063.png

你可以通过运行以下代码来查看游戏ID:

ec5be86909aeaccb13e5fa445a41e97f.png

该命令会打开 MAME 模拟器,你可以从游戏列表中选择你所要的那款游戏。游戏的 ID 通常位于标题后面的括号中。

  • 内存地址

954a3706731fe12a631d007b3ccee196.png

可以使用以下命令运行 Debugger:

ddbd6d242034a234ad7eaa639b6bec1b.png

更多关于该调试工具的使用说明请参考此教程:https://www.dorkbotpdx.org/blog/skinny/use_mames_debugger_to_reverse_engineer_and_extend_old_games

当你确定了所要跟踪的内存地址后可以执行以下命令进行模拟:

4911810c72bd276791530daa490e8060.png

该命令会启动模拟器,并在工具包导入到模拟器进程时暂停。

  • 分步模拟

在工具包导入完成后,你可以使用 step 函数分步进行模拟:

181a48ad2e91937951ed18575762f0c7.png

step 函数将以 Numpy 矩阵的形式返回 frame 和 data 的值,同时也会返回总时间步长的所有内存地址整数值。

  • 发送输入

如果要向仿真器输入动作,你还需要确定游戏支持的输入端口和字段。例如,在街头霸王游戏中需要执行以下代码进行投币:

c053bcc1e9842b5e21ceb5f555d17746.png

可以使用 list actions 命令查看所支持的输入端口,代码如下:

1d2a94cb5fd334a4881f45a3e5112430.png

以下返回的列表就包含了街头霸王游戏环境中可用于向 step 函数发送动作的所有端口和字段:

7844a85eff07cfe07f994296bdce91b7.png

模拟器还有一个 frame_ratio 参数,可以用来调整你的算法帧率。在默认设置下,NAME 每秒能生成 60 帧。当然,如果你觉得这样太多了,你也能通过以下代码将其改为每秒 20 帧:

e5cddcdd3bea9dc91336de306363e893.png

a3c9044653f124ceaea42418adda516d.gif

▌性能基准测试

9ba9621f74590102770acbab467d4aa0.png

▌简单的 ConvNet 智能体

97d666255e197cb764ef92344ef08c3c.png

62f38798fed37f4daa1b99cd8de0fd25.png

5898889aca62a57663457b4e768a8870.gif

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

c96e8a10de0545fccfc2b4a2a2006751.gif

觉得不错,点个“在看”然后转发出去703fa5b90a817f0d0405d5744788d89f.gif

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值