张倩 蛋酱编辑

赛车游戏玩腻了,我训练个AI自己跑《赛道狂飙》

学过 AI 的码农,游戏都不亲自玩。


很多同学在学了 AI 之后,都会「支使」AI 去做各种事情,玩游戏也不例外。

《赛道狂飙》是一款经典的娱乐型竞速游戏,已经有着十几年的发展历史。赛车游戏大多比拼的是如何最快从起点抵达终点,但《赛道狂飙》的赛道设计更加多元,极其考验玩家的技术水平,这也是它的独特魅力所在。

Youtube 博主 yoshtm 是这一经典游戏的玩家之一。他一直在思考,能否让 AI 玩这个游戏?

最近,他成功将模型训练了出来,而且在《赛道狂飙》的新旧版本上都试了一下,效果还可以:

他用的是非常简单的监督学习模型,只有 2 个隐藏层(64+16 个神经元),包含 16 个输入(15 个赛道间距数据和 1 个车速数据)和 4 个输出(前、后、左、右)。

虽然技术上比较简单,但由于娱乐性较强而且容易上手,yoshtm 的项目还是在 Reddit 上收获了上千的点赞。

既然是监督学习,首先要解决的问题必然是标注数据。在第一版的视频中,yoshtm 介绍道,他创建了一个包含上百个转弯的训练地图,然后自己「驾驶」赛车在地图上跑。此外,他还创建了一个程序,用来逐帧检测赛车与墙之间的距离、车速以及自己的操作(上下左右)等信息。

收集到足够多的数据之后,yoshtm 创建了一个 AI 算法来学习地图环境与操作之间的对应关系。

在实际运行过程中,算法可以根据实时检测到的间距、车速等信息来预测合适的操作。

第一版的战绩如下:

有人可能会好奇,为什么这些受同一个 AI 系统控制的车辆行驶轨迹却不一样?原因在于 AI 捕捉到的帧也并不相同,因为屏幕捕获频率并不是连续的,而且使用的算法也存在少量的随机性。

今年 7 月,育碧发布了新版《赛道狂飙》(《赛道狂飙:永恒国度》的重制版)之后,yoshtm 想看看:在上一版游戏中搭建的 AI 系统,是否也能在新版本游戏中使用。

由于两个版本非常相似,yoshtm 只做了一些细微的改进。

数据收集方式和之前差别不大(这次在新地图上行驶了 1 个小时,收集了 5 万个数据),但是加入了斜坡和飞跃:

在之前的版本中,yoshtm 主要用图像检测方法来记录每一帧的速度。但在新的版本中,由于游戏页面发生变化,图像检测已不可行,所以他改用 Openplanet 直接访问游戏 API。

旧版本的速度获取方法。

新版本的速度获取方法。

在地图中的简易环节,AI 仍然比大部分的人类玩家要慢,但至少比初学者要强一些。

竞速中的我自己、AI 以及我的老父亲。

在一些转弯的地方,AI 可能会遇到麻烦,特别是在必须使用刹车的情况下。这里演示了上百次赛车经过转弯处的情况,多数情况下赛车很难顺利通过地图的这一部分:

此外,这个模型还有很多缺陷,比如间距测量不够准确、缺乏记忆等。

但因为很有趣,该创意在 Reddit 机器学习社区引发了许多关注。不过作者也表示,这个模型存在一些待解决的问题,比如说在没有墙壁的情况下,表现确实不够灵活。

目前,该项目的代码尚未开源,之后作者可能会用强化学习算法改进该模型。

对于机器学习从业者来说,这可能只是一个 toy 项目。但由于计算量比较小,模型设计也比较简单,初学者或者对机器学习感兴趣的同学可以动手尝试一下。

参考链接: https://www.reddit.com/r/MachineLearning/comments/ia93ao/p_i_made_an_ai_that_can_drive_in_a_real_racing/
工程AI监督学习游戏AI游戏
暂无评论
暂无评论~