用Python编一个街机拳皇游戏,操作起来!

news/2025/2/6 2:50:49/

这是一个允许你在几乎任何街机游戏中训练你的强化学习算法的Python库,它目前在Linux系统上可用。通过这个工具包,你可以定制算法逐步完成游戏过程,同时接收每一帧的数据和内部存储器地址值以跟踪游戏状态,以及发送与游戏交互的动作。

安装

GitHub地址:github.com/M-J-Murray/MAMEToolkit/blob/master/README.md

你可以用pip安装这个库,只需运行以下命令:

pip install MAMEToolkit

演示:街霸

街霸是史上最经典的游戏之一。现在工具包内包含的街霸版本是街头霸王3:三度冲击(Japan 990608, NO CD),我们以此为例,用以下代码写一个随机智能体:

支持hogwild!

hogwild!? Niu等人引入了一个叫做 Hogwild! 的更新策略,可以使 SGD 可以在多 CPU 上并行更新。处理器在无需对参数加锁的情况下就可以访问共享内存。但仅在输入的是稀疏数据时才有效,因为每次更新仅修改所有参数的一小部分。他们展示了在这种情况下,更新策略几乎可以达到一个最优的收敛率,因为处理器不太可能覆盖掉有用的信息。

建立自己的游戏环境

这个工具包之所以易于上手,是因为它和模拟器本身不需要太多交互,只需注意两点——一是查找你关注的内部状态相关联的内存地址值,二是用选取的环境跟踪状态。你可以用MAME Cheat Debugger,它会反馈游戏的内存地址值如何随时间变化。如果要创建游戏模拟,你得先获得正在模拟的游戏的ROM,并知道MAME使用的游戏ID,比如街霸的ID是'sfiii3n'。

游戏ID

你可以通过运行以下代码找到游戏的ID

这个命令会打开MAME仿真器。你可以搜索游戏列表以找到想要的游戏,游戏的ID位于游戏标题末尾的括号中。

内存地址

如果获得了ID,也有了想要跟踪的内存地址,你可以开始模拟:

这会启动仿真器,并在工具包连接到模拟器进程时暂停。

 

分步运行仿真器

连接工具箱后,你可以分步运行仿真器:

step函数会把帧数据作为NumPy矩阵返回,同时,它也会返回该时间步长的所有内存地址整数值。

如果要向仿真器输入动作,你还需要确定游戏支持的输入端口和字段。比如玩街霸需要先投币,这个代码是:

要确定哪些端口可用,请使用list actions命令:

下面这个返回的列表就包含街霸环境中可用于向步骤函数发送动作的所有端口和字段:

仿真器类还有一个frame_ratio参数,可用于调整算法所见的帧速率。默认情况下,MAME以每秒60帧的速度生成帧,如果你觉得这太多了,想把它改成每秒20帧,可以输入以下代码:

 

MAME性能基准测试

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

 

ConvNet智能体

为了确保工具包能够训练算法,作者还设置了一个简单的5层ConvNet,只需少量调整,你就可以用它进行测试。在街霸实验中,这个算法能够成功学习到游戏的一些简单技巧,比如连击(combo)和格挡(blocking)。街霸本身的游戏机制是分成10个关卡(难度递增),玩家在每个关卡都要迎战不同的对手。刚开始的时候,这个智能体平均只能打到第2关。但在经过2200次训练后,它平均能打到第5关。

至于智能体的学习率,它是用每一局智能体所造成的净伤害和所承受的伤害来计算的。


http://www.ppmy.cn/news/632922.html

相关文章

拳皇重生服务器维护,用Kaillera打造拳皇等街机服务器教程

就在前几天,我们寝室突然流行起上个世纪的街机游戏,什么拳皇、伺魂啦,什么格斗、霸王忍法帖啊,三国之类的街机模拟游戏。可是一个人和电脑玩多了,自然的就会失去兴趣,和真人打那才是真是的体验。于是我四处寻找资料,终于找打了街机联网游戏的办法。 第一步,用一台电脑建…

DevSecOps实践:如何在研发过程中做好供应链安全

DevSecOps与供应链安全 很多企业都建立了DevOps流程,但安全基本还处在流程之外,没有融入传统DevOps流程,导致安全一直都是敏捷交付的瓶颈。本篇内容我们将从DvSecOps和软件供应链安全的角度来谈谈研发过程中的安全问题。 01 DevSecOps——供…

C语言转义字符

字符集(Character Set)为每个字符分配了唯一的编号,我们不妨将它称为编码值。在C语言中,一个字符除了可以用它的实体(也就是真正的字符)表示,还可以用编码值表示。这种使用编码值来间接地表示字…

第十六届全国大学生智能车竞赛山东赛区成绩汇总

简 介: 本文汇集了2021年第十六届全国大学生智能车竞赛山东赛区比赛本科组与专科组比赛成绩。 关键词: 智能车竞赛,山东赛区,2021年 01 比赛成绩 一、本科组参赛队伍 山东赛区本科组高校总共有43所学校共计435支队伍参加了山东赛区…

盛大的棋局

《盛大的棋局》(发表于《电脑商情报之游戏天地》)   文/笑三少 前言、 每个做互联网的人都知道腾讯恐怖;   每个玩网游戏的人都讨论《魔兽世界》易主;   每个搞研发的人都不停抄袭《征途》。   要我说,   …

转载育碧七年

最近有些读者对我注册了三个ubishanghai相关的网址用作本文的连接有所不满,并且对我提出了意见,在这里我想做一个简单申明: 1、如我之前所说,《育碧七年》说的是我在Ubi Shanghai的七年经历,我在今年2月份还就职于Ubi…

TokenGazer一问到底 | 第28期:研究员 vs Decentraland

前言 TokenGazer《一问到底》是一档辨析区块链领域一级市场项目优劣的优质栏目。每一期将针对区块链领域早期的一级市场项目,邀请项目负责人做客现场,和社群内百余名研究员深度问答、科学辨析。旨在通过项目方与研究员高质量的对弈问答,打造专…

优秀程序员值得借鉴的一些信息

目录 <1>:关于项目开发&#xff1a;项目的75个注意事项 <2>:关于程序员&#xff1a;程序员从初级到中级10个秘诀 <3>:关于软件设计&#xff1a;一些软件设计的原则 <4>:关于工作&#xff1a;每天写出好代码的5个建议 <5>:关于工作环境&#xff1…