教AI逐帧搓招玩《铁拳》通关最高难度,现在的街机游戏爱好者牛啊
博雯发自凹非寺量子位|公众号QbitAI
现在的AI都开始学着逐帧搓招打街机了?
《拳皇98》、《街头霸王》、《死或生》……一干童年回忆全都玩了个遍 , 其中还有号称要打5000场才能入门的3D格斗游戏《铁拳》:
文章图片
没错 , 就是那个对新手极不友好的《铁拳》 , 随便拉一张角色的搓招表感受一下这个复杂度:
(没错 , 各种压帧判定的JF技就是其特色之一)
文章图片
△铁拳TT2出招表
但AI偏偏就能在入坑没多久就通关了最高难度:
文章图片
△左侧为AI
这款AI的背后是一位个人开发者 , 也是一位骨灰级的街机游戏爱好者 。
他训练出来的新手“铁匠”在Reddit的“比赛录播”已经有近500的热度:
文章图片
强化学习训练框架
这位AI铁匠的背后 , 是一个叫做DIAMBRAArena的强化学习交互框架 。
DIAMBRAArena提供了多个强化学习研究和实验环境 , 具有情节性的强化学习任务 , 由离散的动作(如游戏手柄按钮)和屏幕中的像素和数据(如人物血条)组成 。
在这一框架中 , 智能体会向环境发送一个动作 , 环境对其进行处理 , 并相应地将一个起始状态转换为新状态 , 再将观察和奖励返回给智能体 , 以此交互循环:
文章图片
要实现上述循环的代码也非常简单:
importdiambraArena#Mandatorysettingssettings={}settings["gameId"]="doapp"#Gameselectionsettings["romsPath"]="/path/to/roms/"#Pathtoromsfolderenv=diambraArena.make("TestEnv",settings)observation=env.reset()whileTrue:actions=env.action_space.sample()observation,reward,done,info=env.step(actions)ifdone:observation=env.reset()breakenv.close()
这一框架目前支持Linux、Windows、MacOS等主流的操作系统 。
而这款AI的“实战场”为早期的TekkenTagTournament , 当然 , 搓招复杂度完全不逊色于之后的新版本……
文章图片
开发者选择了风间仁(Jin)和吉光(Yoshimitsu)两名具有代表性的角色作为主要操作对象 。
【教AI逐帧搓招玩《铁拳》通关最高难度,现在的街机游戏爱好者牛啊】输入分别为:从RGB转换为灰度 , 并缩小到128x128px的游戏屏幕像素值、对战局数(Stage)、人物血条、游戏界面的一侧 。
训练中的奖励是一个基于生命值的函数 , 如果对方生命值损伤则得到正面奖励 , 己方控制的角色生命值损失则得到负面惩罚 。
同时 , AI的动作速率也被限定为最大速率的1/10 , 即游戏中每6步发送一个动作 。
由于框架使用的是一种离散的动作空间 , 因此 , 智能体在训练中的同一时间只能选择一个移动动作9向上 , 向下等)或攻击动作(冲击 , 踢 , 出拳) 。
因此 , 虽然一个连击组合的实战能力更强 , 但由于AI无法同时点击两个动作 , 在真实的对战中 , 便会出现AI频繁使用踢(Kick)和更换角色(swap)两个动作的情况:
文章图片
评论区有资深PVP爱好者表示 , 想要看到这种顶级AI选手互虐的激烈场景 , 而开发者本人对此非常赞同:
我们正在创建一个平台 , 在这个平台上 , 程序员将提交他们训练有素的AI并互相对抗 , 并在我们的频道上播放比赛 。
相关经验推荐
- DYG临阵换帅,指尖卸任,新教练是十六,背水一战,再输就去B组!
- 红警3人防守:遗落幽浮1人单通教程!菜鸡王
- 丐帮秒天秒地秒空气?掌峨眉直接教做人,玩过才知道有多强
- 王者荣耀有钱的用户有很多|王者荣耀:教你一个可以大量获取皮肤碎片并且不用做任务的方法
- 为了看完教程 PS5《地平线:西之绝境》加载增长
- 最近啊|王者荣耀:狼队主帅林教练即将回归,回归指日可待
- “这个家不能没有悲伤”,WE教练锐评战队表现,其他人说都不想
- Hope金克丝五杀,Kanavi人马教学局!JDG轻取OMG斩获四连胜
- 大家好|热血传奇:野外遭遇“红名”沃玛教主,交手5分钟收获黑铁头
- “角色互换”北枫用三只手对线琪亚娜,网友:这波叫作反向教学