作者 | MJ-Murray

译者 | 孤鸿

整理 | Jane

出品 | AI科技大本营

从世界瞩目的围棋游戏 AlphaGo,近年来,强化学习在游戏领域里不断取得十分引人注目的成绩。自此之后,棋牌游戏、射击游戏、电子竞技游戏,如 Atari、超级马里奥、星际争霸到 DOTA 都不断取得了突破和进展,成为热门的研究领域。

突然袭来的回忆杀~

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

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

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

首先你需要准备的是

  • 操作系统:Linux

  • Python 版本:3.6+

▌安装

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

《街头霸王3》示例

这个工具包目前已用于游戏《街头霸王 3》(Street Fighter III Third Strike: Fight for the Future), 还可以用于 MAME 上的任何游戏。下面的代码演示了如何在街头霸王的环境下编写一个随机智能体

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

游戏环境设置

  • 游戏 ID

在创建一个模拟环境之前,大家需要先加载游戏的 ROM,并获取 MAME 所使用的游戏 ID。比如,这个版本街头霸王的游戏 ID 是“sfiii3n”,你可以通过运行以下代码来查看游戏ID

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

  • 内存地址

实际上该工具包与模拟器本身不需要太多的交互,只需要查找和内部状态相关联的内存地址,同时用所选取的环境对状态进行跟踪。你可以使用 MAME Cheat Debugger 来观察随着时间的变化,内存地址值发生了怎样的改变。

可以使用以下命令运行 Debugger

更多关于该调试工具的使用说明请参考此教程:

https://www.dorkbotpdx.org/blog/skinny/use_mames_debugger_to_reverse_engineer_and_extend_old_games

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

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

  • 分步模拟

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

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

  • 发送输入

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

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

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

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

▌性能基准测试

目前该工具包的开发和测试已经在 8 核AMD FX-8300 3.3GHz CPU 以及 3GB GeForce GTX 1060 GPU 上完成。在使用单个随机智能体的情况下,街头霸王游戏环境可以以正常游戏速度的 600%+ 运行。而如果用 8 个随机智能体进行 hogwild 训练的话,街头霸王游戏环境能以正常游戏速度的 300%+ 运行。

简单的 ConvNet 智能体

为了确保该工具包能够训练算法,我们还设置了一个包含 5 层 ConvNet 的架构,只需进行微调,你就能用它来进行测试。在街头霸王的实验中,这个算法能够成功学习到游戏中的一些简单技巧如:连招 (combo) 和 格挡 (blocking)。街头霸王的游戏机制是由易到难设置了 10 个关卡,玩家在每个关卡都要与不同的对手对战。刚开始时,智能体平均只能打到第二关,而当经过了 2200 次训练后,它平均能打到第 5 关。学习率的设置是通过每一局中智能体所造成的净伤害和所承受的伤害来计算的。

原文链接:

https://github.com/M-J-Murray/MAMEToolkit

——【完】——

2018 中国大数据技术大会将于 12 月 6 - 8 日在新云南皇冠假日酒店举行。汇聚超百位国内外实力讲师从学界翘楚到行业一线大拿:

管晓宏:中国科学院院士;

张宏江:源码资本投资合伙人;

张晓东:美国俄亥俄州立大学 Robert M. Critchfield 讲席教授;

陈性元:北京信息科学技术研究院副院长;

周靖人:阿里巴巴集团副总裁;

李浩源:Alluxio 公司创始人&CEO

......

全方位立体解读大数据时代的技术进程,为众技术爱好者奉上一场优质干货盛宴。

用这个Python库,训练你的模型成为下一个街头霸王!相关推荐

  1. python实现人脸检测及识别(2)---- 利用keras库训练人脸识别模型

    前面已经采集好数据集boss文件夹存放需要识别的对象照片,other存放其他人的训练集照片,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的tensorflo ...

  2. caffe学习(六):使用python调用训练好的模型来分类(Ubuntu)

    在caffe的学习过程中,我发现我需要一个模板的程序来方便我测试训练的模型.我在上一篇博客中(caffe学习(五):cifar-10数据集训练及测试(Ubuntu) ),最后测试训练好的模型时是修改c ...

  3. 目标检测:RFCN的Python代码训练自己的模型

    py-R-FCN源码下载地址: https://github.com/Orpine/py-R-FCN 也有Matlab版本: https://github.com/daijifeng001/R-FCN ...

  4. python 点击tree目录、执行下一个操作_如何使用python解决下一个iter(xml.etree.ElementTree)?...

    我假设您正在使用xml.etree.ElementTree,因为它是标准库的一部分.考虑以下片段:appelation = re.compile('Mr') points = root.iter('p ...

  5. python caffe 训练自己的模型_python接口调用已训练好的caffe模型测试分类方法

    训练好了model后,可以通过python调用caffe的模型,然后进行模型测试的输出. 本次测试主要依靠的模型是在caffe模型里面自带训练好的结构参数:~/caffe/models/bvlc_re ...

  6. python+sklearn训练决策树分类模型(绘制学习曲线和验证曲线)

    本文所用文件的链接 链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ 提取码:p57s 关于决策树的初级应用,可以看我之前的文章: https:// ...

  7. 自制人脸数据,利用keras库训练人脸识别模型

    向AI转型的程序员都关注了这个号

  8. 汕尾python高手_每天两小时,下一个python 高手就是你!满满都是干货

    Python是近些年被很多程序员奉为"最佳入门选择"的一种编程语言,相较于C.Java 等其他的编程语言,Python对于从未接触过编程语言的人会更友好一些,但如果在学习Pytho ...

  9. Java如何跨语言调用Python/R训练的模型

    在 如何使用sklearn进行在线实时预测(构建真实世界中可用的模型) 这篇文章中,我们使用 sklearn + flask 构建了一个实时预测的模型应用.无论是 sklearn 还是 flask,都 ...

最新文章

  1. 教你玩转 统一异常处理
  2. 盘点2018十大科技丑闻,IT相关两项
  3. 网络数据包收发流程(三):e1000网卡和DMA
  4. android r 编译找不到头文件_「投稿」iOS逆向——砸壳与反编译
  5. python实现isodd函数、参数为整数、如果整数为奇数_python 程序练习题
  6. Error: listen EACCES: permission denied 0.0.0.0:80
  7. 剑指offer面试题[57]-删除链表中重复的结点
  8. dpkg-buildpackage: error: fakeroot not found, either install the fakeroot
  9. BIM族库下载——Revit管道卡箍连接族
  10. C++ 浪漫烟花表白程序520表白 情人节表白 七夕节表白 有烟花爆炸音效 包含程序所需要的背景音乐和图片素材 并且文中附带有完整代码 附带安装程序 可用于520表白 情人节表白 七夕节表白
  11. PHP 网页支付支付宝支付接口对接
  12. egret的WebView实现(基于egret2.5)
  13. Simpson公式、复化梯形公式、Cotes公式以及Romberg公式
  14. 读书笔记: Cartesian Impedance Control of Redundant and Flexible-Joint Robots, Section 1
  15. Mybatis的一个连接mysql的坑
  16. c语言linux系统时间,【整理】C语言设置Linux系统时间 | 勤奋的小青蛙
  17. 【TcaplusDB知识库】TcaplusDB进程启动介绍
  18. 【matlab图像处理】插值方法
  19. Python之23种设计模式
  20. CCNA 初学(第一课)

热门文章

  1. 关于ORA-01950: no privileges on tablespace 的解决
  2. 大规模服务设计部署经验谈
  3. [译]怎样用VisualStudio查看非托管代码
  4. restful可以转发么_DRF使用超链接API实现真正RESTful
  5. 如何理解导远技术手册
  6. java wait定时_java定时器的使用(Timer)
  7. 使用TortoiseGit,设置ssh方式连接git仓库。
  8. 基于μC/OS—III的CC1120驱动程序设计
  9. 【洛谷P1697】货车运输
  10. ubuntu联网经常掉线的解决方法