游戏葡萄|现在放那儿自己跑就行了,网易的黑科技:以前策划写三四周AI( 四 )


游戏葡萄|现在放那儿自己跑就行了,网易的黑科技:以前策划写三四周AI
文章图片
看上去好像很简单一个场景 , 1V1 , 实际上还有很多困难 。 《逆水寒》里面有20个技能 , 每次携带10个技能出场 , 每个玩家携带的不一样 , 升级路线也不一样 。 因为AI是替代玩家打 , 这就要求AI要去适应所有玩家的技能组合 。 这个组合其实很多 。 光这样一个职业AI , 就有4万多种技能组合 。
怎么表示这种场景?玩家可能携带了很多技能 , 怎么在建模过程中表示带了哪些技能、可以用哪些技能、让模型合理地用技能?我们用01向量表示玩家携带的技能 。 模型可能会输出未携带技能 , 当它输出不合法的动作 , 我们会替换掉 。 这个游戏里面龙吟地上插很多器件 , 可以刷技能CD , 理论上它应该要看到这个信息 。
游戏葡萄|现在放那儿自己跑就行了,网易的黑科技:以前策划写三四周AI
文章图片
常见想法是 , 深度学习直接画一张图就行了 , 用Image表示就可以了 。 这样它的计算量成倍增长 , 需要很多GPU、很多计算时间 。 但这对于这样一款游戏真正落地来说是不适合的 , 我们不可能用这么多的代价训练这样一个AI 。 我们做了一个取舍:我们让AI看到这些 , 雷达图让AI看到周边哪些地方是有器件的 , 不需要那么准的位置 , 标一下就行了 。 最后展出来就是八维的向量 , 输入到state里面 , 最后测出来这个已经达到水平了 。
我们训出来比较强的AI , 怎么匹配多难度的玩家?一种做法是比较简单的 , 一种比较天然的想法 , 因为我们训练这个模型就是越来越强的 , 我把前期的模型拿出来就是弱的 , 中期的模型拿出来比较中期的水平 。
这样就会带来一个问题——可能在线上部署了非常多的模型 , 在线上用的时候 , 我要用十几个段位 , 部署十几个模型 , 对我们挑战也非常大 。 我们后来只做一个模型 , 专家跟低水平玩家之间的差距体现在几方面 , 一是操作反应速度、技能释放频率 。 高手技能释放间隔非常短 , 释放速度非常快 , 那种动作的反应非常好 。 低水平玩家 , 这点要弱一点 。
所以我们增加了一维参数 , 调整AI输出频率 。 另外高水平玩家在APM高的基础上 , 误操率也很低 。 而有些玩家 , 可能按的很快 , 但是很多时候按错了 , 做了很多误操作 , 这也是影响人水平的过程 。
还有一个维度就是动作随机概率 , 让模型有一定概率使出随机动作 , 这个也比较明显地降低了玩家AI水平 。 另外一点 , 我们是在仿照人类 , 玩家对于战场信息判断有问题的 。 针对这一点 , 可以在输入层上加噪音 , 在一些关键信息——比如说血量、位置、技能的CD——这些关键信息上加一些噪音 , 这个AI水平也会有明显的下降 。 他自己也看不清了 , 判断就会出错 。
游戏葡萄|现在放那儿自己跑就行了,网易的黑科技:以前策划写三四周AI
文章图片
这些东西到底有没有用?我们做了验证 , 让这些参数变得水平越来越低、间隔越来越大、随机概率越来越高 。 我们训一个AI之后 , 最高水平是1600 , 随着参数越来越弱 , 水平几乎是线性下降 。 线上打出来的感觉 , 也和低水平玩家蛮像的——这个基本上已经满足了策划的需求 。
我们线上部署的时候部署了一个模型 , 这样一个场景下 , 基本上能满足当前1V1的需求 。 对于复杂的 , 比如说团队游戏 , 这些参数可能不够 , 还要在策略层上做一些丰富性 。 不过对当前的场景来说 , 只能说这是一个比较好的解决方案了 。
另外 , 我们训练出的这个AI , 水平到底够不够强 , 开发组这边请最高水平的玩家来体验过 。 实际上AI水平已经非常高了 。
红色的是AI , 绿色的是我们这边龙吟的高手 。 我们AI是不掉血的 , 基本上所有技能都可以完美躲过 。 如果没玩过这个游戏可能看不太清楚为什么赢 。 为什么两个人放同样的技能 , 看着差不多的 , 但有一方基本上没怎么掉血?我们采访过策划 , 他说AI的一些组合非常合理 , 很多时候确实是他们策划怎么设计的 , 打出来就是什么样的 , 基本满足策划的需求、设计的想法 。 再加上可能因为是最高水平 , 反应非常快 , 所以人类反应跟不上 , 实际上很难打过它 。


推荐阅读