今天和大家分享一下我的知识,对于拳皇2000rom(教AI逐帧打《铁拳》来说是最辛苦的。现在街机游戏迷都牛逼了。)来说明一下,如果你恰好正在解决你的问题,别忘了关注这个网站,所以现在就开始吧。
博雯 发自 凹非寺
量子位 | 公众号 QbitAI
现在的AI都开始学着逐帧搓招打街机了?
《拳皇98》, 《街头霸王》, 《死或生》 .小时候的记忆我都玩过,包括《铁拳》,一款号称要5000局才能上手的3D格斗游戏:
没错,就是《铁拳》,对新手极其不友好。随便拉一个角色的搓桌子就能感受到其中的复杂:
(没错,JF技术的各种帧压制决策是其特点之一)
铁拳TT2推表
不过,艾还是在进坑没多久就熬过了最高难度:
左边的艾
这个AI的背后是个人开发者,是硬核街机游戏爱好者。
他训练出来的新手“铁匠”在Reddit的“游戏录播”中有近500倍的人气:
加强学习和培训框架
这个AI铁匠的背后是一个叫做DIAMBRA Arena的强化学习交互框架。
DIAMBRA Arena提供了许多强化学习研究和实验环境,有剧情强化学习任务,由离散的动作(如游戏手柄按钮)和屏幕上的像素和数据(如人物的血条)组成。
在这个框架中,智能体向环境发送一个动作,环境对其进行处理,并相应地将一个初始状态转化为一个新的状态,然后向智能体返回观察和奖励,如此交互循环:
要实现上述循环的代码也非常简单:
import diambraArena
# Mandatory settings
settings = {}
设置['gameId']='doapp' #游戏选择
settings[' romsPath ']='/Path/to/Roms/' # Roms文件夹的路径
env=diambraArena.make('TestEnv ',settings)
observation = env.reset()
while True:
actions = env.action_space.sample()
观察、奖励、完成、信息=环境步骤(操作)
if done:
observation = env.reset()
break
env.close()
这个框架目前支持Linux、Windows、MacOS等主流操作系统。
而这个AI的“实战场”就是早期的铁拳Tag锦标赛。当然,拓印的复杂程度并不比后来的新版本逊色.
开发商选择了冯和纪广这两个具有代表性的人物作为主要操作对象。
输入有:游戏画面从RGB转换为灰度并缩小到128 x 128px的像素值、战斗次数(阶段)、角色的血条、游戏界面的一面。
训练中的奖励是基于健康的函数。如果对方的生命值受损,将获得正奖励,而己方控制的角色生命值损失将获得负惩罚。
同时AI的动作速率也被限制在最大速率的1/10,即游戏中每6步发一个动作。
因为帧使用离散的运动空间,代理只能选择一个运动9(向上、向下等。)或者在训练中同时攻击(冲击、踢腿、出拳)。
所以,虽然连击组合具有更强的实战能力,但由于AI无法同时点击两个动作,所以在真实战斗中,AI会频繁使用踢和交换动作:
评论区有资深PVP爱好者表示,很想看到这种顶级AI玩家互相虐的激烈场面,开发者本人对此也非常赞同:
我们正在创建一个平台,程序员将在这个平台上提交他们训练过的AI并相互战斗,并在我们的频道上广播比赛。
人工智能锦标赛
现在,开发者团队已经开始正式筹备这场“AI游戏锦标赛”。背后的程序员和开发人员相当于“教练”或“玩家的父母”,最后的赢家可以获得1400瑞士法郎(折合人民币9261元)。
“竞技项目”不仅仅是一种铁腕手段,开发者说这些格斗游戏的底层机制都差不多,只需要修改组合技能、人物血条值等游戏的差异属性。
所以他们的DIAMBRA Arena框架为各类街机电子游戏提供了完全符合OpenAI健身房标准的Python API。
像死或生、街头霸王等多个流行的街机游戏都被囊括其中:
GitHub链接:
https://github.com/diambra/diambraArena
视频链接:
https://www.youtube.com/watch?v=9HAKEjhIfJY
参考链接:
[1]https://。Reddit。com/r/reinforcement learning/comments/sq1s3f/deep _ reinforcement _ learning _ algorithm _ completing/
[2]https://www。Reddit。com/r/machine learning/comments/sqra1n/p _ deep _ reinforcement _ learning _ algorithm/
— 完 —
量子位 QbitAI 头条号签约
关注我们,第一时间获知前沿科技动态