我用python训练了一个拳皇模型,从此在各地游戏厅再也没输过!
从世界瞩目的围棋游戏 AlphaGo

突然袭来的回忆杀~
今天为大家介绍一个在街机游戏《街头霸王 3》中进行模拟来训练改进强化学习算法的工具包。不仅在 MAME 游戏模拟器中可以使用,这个 Python 库可以在绝大多数的街机游戏中都可以训练你的算法。
下面营长就从安装、设置到测试分步为大家介绍一下。
目前这个工具包支持在 Linux 系统,作为 MAME 的包装器来使用。通过这个工具包,你可以定制算法逐步完成游戏过程,同时接收每一帧的数据和内部存储器的地址值来跟踪游戏状态,以及发送与游戏交互的动作。
首先你需要准备的是:
操作系统:Linux
Python 版本:3.6+
▌安装
你可以使用 pip 来安装该库,运行下面的代码:
▌《街头霸王3》示例
下面的代码演示了如何在街头霸王的环境下编写一个随机智能体。
此外,这个工具包还支持 hogwild 训练:
▌游戏环境设置
游戏 ID
你可以通过运行以下代码来查看游戏ID:
该命令会打开 MAME 模拟器,你可以从游戏列表中选择你所要的那款游戏。游戏的 ID 通常位于标题后面的括号中。
内存地址
可以使用以下命令运行 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 帧:
▌性能基准测试

▌简单的 ConvNet 智能体
我用python训练了一个拳皇模型,从此在各地游戏厅再也没输过!的更多相关文章
- 使用fastai训练的一个性别识别模型
在学习了python中的一些机器学习的相关模块后,再一次开始了深度学习之旅.不过与上次的TensorFlow框架不同,这一次接触的是fast.ai这样一个东西.这个框架还不稳定,网上也没有相关的中文文 ...
- 怎么训练出一个NB的Prophet模型
上篇<神器の争>主要是介绍Prophet的特点以及prophet入门的一些注意事项,但离真正的实际运用还有段距离.本篇主要讲解实际运用中Prophet调参的主要步骤以及一些本人实际经验. ...
- 用 Python 图像识别打造一个小狗分类器
项目介绍 小狗分类器可以做什么? 通过这个分类器,你只需要上传照片,就可以得到小狗的品种,以及更多的信息. 这就是所谓的「机器学习」,让机器自己去“学习”.我们今天要做的这个分类任务,是一个“监督 ...
- 使用OpenCV和Python构建自己的车辆检测模型
概述 你对智慧城市的想法感到兴奋吗?如果是的话,你会喜欢这个关于建立你自己的车辆检测系统的教程的 在深入实现部分之前,我们将首先了解如何检测视频中的移动目标 我们将使用OpenCV和Python构建自 ...
- LUSE: 无监督数据预训练短文本编码模型
LUSE: 无监督数据预训练短文本编码模型 1 前言 本博文本应写之前立的Flag:基于加密技术编译一个自己的Python解释器,经过半个多月尝试已经成功,但考虑到安全性问题就不公开了,有兴趣的朋友私 ...
- GAN实战笔记——第三章第一个GAN模型:生成手写数字
第一个GAN模型-生成手写数字 一.GAN的基础:对抗训练 形式上,生成器和判别器由可微函数表示如神经网络,他们都有自己的代价函数.这两个网络是利用判别器的损失记性反向传播训练.判别器努力使真实样本输 ...
- Gensim进阶教程:训练word2vec与doc2vec模型
本篇博客是Gensim的进阶教程,主要介绍用于词向量建模的word2vec模型和用于长文本向量建模的doc2vec模型在Gensim中的实现. Word2vec Word2vec并不是一个模型--它其 ...
- 机器学习在入侵检测方面的应用 - 基于ADFA-LD训练集训练入侵检测判别模型
1. ADFA-LD数据集简介 ADFA-LD数据集是澳大利亚国防学院对外发布的一套主机级入侵检测数据集合,包括Linux和Windows,是一个包含了入侵事件的系统调用syscall序列的数据集(以 ...
- 基于Python的信用评分卡模型分析(二)
上一篇文章基于Python的信用评分卡模型分析(一)已经介绍了信用评分卡模型的数据预处理.探索性数据分析.变量分箱和变量选择等.接下来我们将继续讨论信用评分卡的模型实现和分析,信用评分的方法和自动评分 ...
随机推荐
- go 语言 搭建 图片上传 服务器
工具: LiteIDE 配置: 代码:list.html <!doctype html> <html> <head> <meta charset=" ...
- SpringCloud学习笔记(十一、SpringCloud总结)
SpringCloud Config: 1.动态刷新配置:通过job调用Set<String> keys = contextRefresher.refresh()这段代码即可. 2.如何实 ...
- 了解angularjs中的生命周期钩子函数$onInit,$onChange,$onDestory,$postLink
壹 ❀ 引 我在前面花了三篇文章用于介绍angularjs的指令directive,组件component,并专门花了一篇文章介绍directive与component的不同,其中提到在compon ...
- python 读取ini 配置文件
安装 pip install configparser 1 配置文件 config.ini: [MysqlDB]user=rootpasswd=123456sport=3306db_name=my_d ...
- [C++]Game模板-正面视角
前言 本来是想打一个小游戏的-- 可是打到一半思路断了-- 只打出了模板--先把模板拿出来放着 Code //head #include <iostream> #include <c ...
- kafka速度快的原因
我们都知道Kafka非常快,比绝大多数的市场上其他消息中间件都要快.这里来研究下那么为什么Kafka那么快(当然不会是因为它用了Scala). Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上 ...
- Python 从入门到进阶之路(六)
之前的文章我们简单介绍了一下 Python 的面向对象,本篇文章我们来看一下 Python 中异常处理. 我们在写程序时,有可能会出现程序报错,但是我们想绕过这个错误执行操作.即使我们的程序写的没问题 ...
- Jedis & spring-data-redis
当我们了解了redis的五大数据类型,手动去敲一敲每个数据类型对应的命令,无论是再来看jedis,还是spring-data-redis都是很轻松的,他们提供的API都是基于原生的redis命令,可读 ...
- PAT 1007 Maximum Subsequence Sum 最大连续子序列和
Given a sequence of K integers { N1, N2, …, NK }. A continuous subsequence is defined to be { Ni, Ni ...
- mysql中concat函数的使用相关总结
concat(str1,str2) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. mysql> select concat('11','22','33') ...