查看原文
其他

AI 玩王者农药

老逛 逛逛GitHub 2021-08-19
去年 5 月初,王者荣耀上线了一个挑战 AI 「绝悟」的限时活动,当时打开游戏界面,就能看到 「挑战·绝悟」的入口,活动出来,我就去体验了一下。
这个挑战一共五关,一关比一关难,像我这样的农药大神前几关随便过,最后一关就只能推塔了,正面硬刚肯定刚不过。这种不敢正面怼的感觉「似曾相识」,我在英雄联盟的末日人机中也体会过,拉克丝的天女散花我至今还有阴影。腾讯的「绝悟」在世界冠军杯半决赛中打败了职业选手,随后又在面向顶级业余玩家开放的体验测试中拿下 99.8% 的胜率。虽然输了一场,但这个出道没多久的 AI 玩家在电竞圈也算打出了名气,当然这个战绩和王校长比还差点,校长在 100% 胜率时宣布退役,是 LOL 电竞圈唯一一位主动放弃 S 赛名额的选手 话说回来,训练出像「绝悟」这样吊的 AI,需要腾讯掌握的海量数据和强大的财力,平民也只能体会挨打的快乐,普通玩家要想训练出一个这样的人工智能不太现实。不过,今天,我给大家带来一个「平民版」的王者农药 AI。这个项目已经在 GitHub 开源,作者是 FengQuanLi,我把预训练文件下载方式和开源地址放在了后台,关注微信公众号「逛逛GitHub」回复「王者」下载。下面是 AI 自己玩王者的视频,先睹为快:视频来自公众号「Jack Cui」该视频是两倍速播放,开源项目作者只训练了一个「后裔」英雄,如果想用其他英雄,可以自己训练。01实现原理这个开源项目的实现原理是怎样的 ?下图是这个模型的核心代码,不算难,我一步步的拆解,我尽量用通俗的语言描述这些技术。让电脑帮我们玩游戏可以分为如下几步,当然这种方式是比较容易实现的方式,并不会用到「强化学习」的东西,而屠杀围棋圈的 AlphaGo 算法是基于强化学习。

1. 获取当前游戏界面。既英雄现在是什么状态、周围有没有敌方英雄、小兵等等。

2. 根据当前游戏界面状态生成操作指令,是应该前进、攻击还是释放技能。

3. 根据生成的操作指令去控制手机,英雄做出相应的动作。对于训练一个平民版的人工智能模型,大体流程就是这样。其中获取当前游戏界面、根据指令去控制手机都有成熟的技术。比如这个项目中使用 scrcpy 获取安卓手机的投屏,这款安卓投屏神器可以将游戏画面投屏到电脑桌面上。有了游戏画面,就得到了这时战局的状况。游戏画面是图片的形式,至于这个图片包含什么内容,人能看明白,但是电脑不懂。这就需要我们自己去提取图片中的特征,这里便会用到深度学习算法的东西。基于卷积神经网络(CNN)来提取图片的特征,项目中使用的是 ResNet 101 分类网络。通过训练这个卷积神经网络,该网络就会具备提取游戏画面特征的能量,有了这些,算法才能进行下一步操作指令的生成。根据图片生成操作指令是开源项目的关键点,这里用的就是大名鼎鼎的 Transformer。Transformer 是 2017 年的一篇论文《Attention is All You Need》提出的一种模型架构,其开创性的思想像一颗重磅炸弹,震惊了整个 NLP 领域。目前在 NLP 各业务全面开花的语言模型如 GPT, BERT 等,都是基于这个模型,搞 Java 的读者可能没听说过这个东西,但是搞算法的小伙伴对这个技术肯定不陌生。生成一系列操作指令,说白了就是生成序列数据,而 Transformer 的 Decoder 就是干这个的,该项目也是使用基于 Transformer 的技术 GPT 构建的。当然图片特征提取和生成操作指令是一起进行「端到端」训练的,为了方便大家理解,我拆开说的。能够生成操作指令了,下一步就就是使用这些指令控制英雄。minitouch 便可完成这一目的,它提供了一个 socket 接口,用于在 Android 设备上触发多点触控事件和手势。总结来说:用 scrcpy 获取当前游戏画面,使用 Transformer 根据图片生成操作指令,然后利用 minitouch 执行这些操作指令,这时游戏中的英雄就会按照指令进行动作了。至于会进行什么样的动作得看你喂给模型什么样的数据了。目前这个模型是使用「后裔」 100 多局对战数据下训练的,对局会表现出送人头之类的问题。这是因为数据量少并且场景简单,有一些复杂场景的数据没有覆盖到,遇到这种不确定因素,英雄也不知道怎么办了。

02

如何使用
使用前,你需要安装好环境和依赖,比如:torch,scrcpy, minitouch 等。还得需要一部安卓手机,如果需要训练自己的英雄还需一块 6 GB显存的显卡。

一、首先下载模型 

你可以关注微信公众号「逛逛GitHub」回复「王者」下载训练过的模型,然后后放入weights 文件夹下

二、修改配置

先运行 「启动和结束进程.py”」启动 scrcpy 把「训练数据截取_A.py”」中的两项改成你设备的参数,_DEVICE_ID 是 adb devices后显示的那个id。


三、运行

这时启动王者荣耀进入 5v5 人机对战 运行 「训练数据截取_A.py”」即可。

如下想训练自己的英雄,项目描述中也有方法,如果需要可以步项目地址,不过该项目还只是一个雏形,如果有能力可以自己完善。

[1] 用自己训练的AI玩王者荣耀是什么体验?

[2] www.bilibili.com/video/BV1UK411g7sF

最后,防止找不到本篇文章,可以收藏点赞,方便翻阅查找。本文首发至公众号 逛逛GitHub(ggGithub),转载请注明出处。


推荐阅读
1. 推荐几个好玩项目
2. 推荐几个有用项目
3. 推荐几个有用工具

每天推荐一个有趣、好玩且可能你会用到的 GitHub 项目。
 

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存