AI 玩王者农药
去年 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”」即可。
如下想训练自己的英雄,项目描述中也有方法,如果需要可以去移步项目地址,不过该项目还只是一个雏形,如果有能力可以自己完善。
[2] www.bilibili.com/video/BV1UK411g7sF
最后,防止找不到本篇文章,可以收藏点赞,方便翻阅查找。本文首 发至公众号 逛逛GitHub(ggGithub),转载请注明出处。
推荐阅读
1. 推荐几个好玩项目
2. 推荐几个有用项目
3. 推荐几个有用工具
每天推荐一个有趣、好玩且可能你会用到的 GitHub 项目。
本文分享自微信公众号 - 逛逛GitHub(ggGithub)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL中怎样快速找出超长索引
大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 需求: 想要查找哪些索引太长了,这个SQL在5.7下跑的特别慢,8.0则挺快的,帮看下有啥优化方案没 具体SQL 和执行计划如下: SELECT c.TABLE_SCHEMA AS DB, c .TABLE_NAME AS TBL, c.COLUMN_NAME AS COL, c.CHARACTER_OCTET_LENGTH AS COL_LEN_BYTES, s.INDEX_NAME, s.SUB_PART * CHARACTER_OCTET_LENGTH/CHARACTER_MAXIMUM_LENGTH AS SUB_PART_LENFROM information_schema.COLUMNS c INNER JOIN information_schema.STATISTICS s USING(TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME)INNER JOIN information_schema.TABLES t USING(TABLE_SCHEMA, TABLE_NAME) WHERE c....
- 下一篇
愚蠢的 SQL Server
今天在SQL Server的坑里跌得鼻青脸肿,折腾两三个小时,终于爬了出来,特此纪念一下,并以此明志! 背景 传统行业的老旧ERP项目 数据库在公司服务器上,版本为SQL Server 2000,本地使用的数据库为SQL Server 2008 R2,数据库工具为Navicat 多数查询是从视图里查 部分业务是写在存储过程里 案发过程 业务功能扩充,需要在数据库中增加几个字段,于是直接从本地SQL Server 2008 R2连接公司SQL Server 2000,在表适当的位置插入所需字段,然后在Navicat中修改对应的视图和存储过程。 然后,奇怪的事情发生了,程序运行未报错也无错误日志,但就是出不来数据! 打断点,跟踪调试,发现程序抛了个异常,但是没有任何代码能捕获到,而且也并未层层抛出,不知道中间哪个环节被吃了!先不管是哪吃了,把异常处理了应该就没问题了,毕竟之前都是正常的。 异常是类型不兼容和类型转换错误,好嘛,开始排查存储过程调用……一切正常! 把查询的SQL输出,在Navicat中查询,也无结果!把查询条件去掉,结果出来了!排查条件吧,结果发现条件没问题!这TM就有点让人...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS关闭SELinux安全模块