标题由觉悟引领的学习
最近在看王者荣耀觉悟相关的资料,觉悟并没有开源,不过网上有个平民版的’觉悟’。我把这个平民版做了重构了,不过目前模型表现效果并不好,打算做好了再共享出来。
通过近期的阅读,发现游戏AI主体流程还是很清晰的,无非相关的模型结构无法详细了解。不过,一旦你深刻理解其中的原理,训练一些简单的游戏,完全没什么问题。难得无非训练数据与算力罢了。
标题训练数据的制作
下面介绍一下王者荣耀训练数据的制作。游戏状态:敌我方塔掉了,敌我方英雄被杀,小兵被击杀等其它人可以在游戏画面中直接获取的信息。组成了游戏画面与游戏状态的函数关系。有这个数据,就可以训练一个状态判别模型,让模型判断当前状态,然后根据当前状态实施奖惩。到达这个状态是由于前面Agent选择的动作导致的,所以Agent模型可以通过动作选择与奖惩来训练。
标题具体识别流程
使用win32gui, win32ui, win32con这三个模块就可以获取游戏画面。再将游戏画面输入到特征提取网络,获取当前画面的特征图。(由于数据标注工程浩大,所以直接用imageNet的预训练参数。如果想要表现的更好的话,可以做目标检测,将关键实例全部标注出来,根据一张画面的特征图做推理是远远不够的,可以把历史的叠加到一起处理。使得模型可以基于过去与现在一同推理。训练好的Agent会根据当前的画面特征池与历史操作池共同推理当前要做的移动动作与攻击动作(也可以扩展)。并将该动作通过pyminitouch发送到设备上,模拟人的操作。pyminitouch需要绑定设备的id,可以通过adb devices获取。
标题实例的标注
如果能够把所有的实体墙,草丛都标注了,那么就可以测算出Agent与这些实例之间的距离。这个尤为重要,可以说是青铜与王者的区别。为什么这么说,因为诸如技能弹道的准确数值,距离草丛的距离,上路敌人消失的时间,能够准确估算出这些信息的,基本都是大神。对于大多数人来说,要么想不起来估算,要么估算的不准。而这些信息,可以发挥了计算机精算的能力。如果都标注好了,那么Agent的成长速度必然很快。
但是,为了公平起见,像距离草丛的准确数值,不需要标注,因为这超出了正常人的能力范围。正常人只会根据当前画面估算当前位置距离草丛的距离(人的特性: 估算)。(其实,这只是基于与人竞争的公平角度来说的,真实模仿一个人。没说飞机就得像小鸟般的速度,你要真有能力把它给又快又准的做好,当然很好,只不过多标一些数据罢了,充分利用已有资源进行突破。)
上路敌人消失的时间,这个其实正常人可以估算出来,但是你能同时记住敌军五个人的时间么,你不能,与此同时,还有对方技能的CD时间。而拥有历史记忆的Agent对全局信息了如指掌。这个不用比了,上升到算力了。除非让Agent的历史记忆缩短,那么这个对它来说太残忍了。因为人会特意去记相关重要信息,为什么不让Agent去记忆。要怪就只能怪算力不如咯。