我看辉哥打dota
本文副标题为:浅析使用序列标注模型解决dota ai问题,-。-
昨天,我去辉哥寝室玩。他那断网了,无聊在打dota的ai。当时王珑也在,一起吐槽ai弱智。忽然,王珑冒出一句“要是ai能学rep就牛B了”。
我当时说,“要是没有内存什么的限制,ai应该也能学得挺牛的”。之所以这么说,因为我认为,ai的逻辑应该都是写在地图里的,而dota的ai地图大约只有7MB左右,应该写不了太多的逻辑。当然,这件事情我也没有详细去探究,所以可能认识是错误的。
今天早上,回想起昨天说的,要是没有内存、运算速度等方面的限制,ai能否通过学习rep变得很牛。因为最近一段时间我一直在做序列标注,就很囧地想到了序列标注。将有限的行为作为一种tag,将一局dota的某个英雄的时间序列切片,对于每个切片,抽取合适的特征,做一个线性的序列标注模型。而将Rep视作是一种人工的标注,用rep训练这个模型。最大熵,crf或者感知器一类的online算法都可以用。至于具体要用什么特征,类似于当前比分、物品、健康状态,其他英雄离自己的位置等等,都可以用来做特征。至于哪些特征具有较强的分类能力,哪些比较渣渣,大概还要看实验结果。
后来,我又想到,实际上游戏中英雄的行为应该不是一种简单的有关行为的时间序列,而是一种类似于状态机的东西。比方说正在放大招的潮汐,下一个时间切片应该还是放大招,而不是移动或者其他。那么是不是在模型解码的过程中加入状态机或者一些人工的规则,搞半指导。也许是个好办法吧。 再后来,就是对策的问题。比方说,见了DPS要开绿杖等等。这些行为貌似可以通过描述特征来学习到。 最后一项,前面提到的都是对于一个英雄建模,但是dota是一项团队运动,所以,我觉得更好的办法是对5个人建模,虽然tag集的大小和状态数量将会增加,但整体效果是提升的,至少我猜可以学出gank、push等等基本的打法吧。 纯YY,勿当真。那些从事游戏ai开发的工程师们,你们是如何设计ai的呢。
下午的时候,又仔细想了一下,ai是不能完整的知道对方的行为序列,所以,决定对策的时间序列或许只有对线,交战等一少部分。全局的特征只能通过现有状态进行推理。
darkgt神牛在博客中回复我说:“但是涉及即时性决策就难一些,主要就是技能的释放和走位,可能要对每一个技能选不同的feature,比如牛头封路就比较特殊。高级一些的考虑对方技能cd,魔量,会有哪些对手支援,队友的技能配合”,要想做得好,的确是个很难的问题。