第2章 强化学习在游戏AI中的应用
2.1 游戏中的智能体
游戏中的智能体一直是游戏的重要组成部分,对提升游戏体验和完善游戏内容有至关重要的作用。按照所控制智能体角色的不同,智能体通常可以分为两类,一类为非玩家角色(Non-Player Character,NPC),另一类是机器人(Bot)。NPC主要作为游戏世界中的一部分,起到引导玩家进行游戏,推动游戏情节发展,增加游戏挑战性的作用。Bot主要在多人竞技游戏中充当和玩家类似的角色,一方面可以帮助新手更快地学习游戏的玩法,提升玩家的游戏技巧;另一方面可以通过合适的强度控制,给玩家提供竞技挑战。除此之外,Bot可以在用户因为某些原因短暂离开游戏时(如网络问题引起的掉线),替代玩家继续进行游戏。
尽管这两类智能体各有侧重,但是在制作方式上是类似的。传统的制作流程往往采用有限状态机、行为树等基于规则编写智能体的技术。
以游戏《吃豆人》为例,如图2.1所示,游戏的目标是控制吃豆人尽可能多地吃掉地图中的豆子,并且要避开其中游走的鬼魂。
图2.1 《吃豆人》游戏
假如要设计一个吃豆人的智能体,就需要考虑吃豆人可能会遭遇哪些状态,这些状态会按照什么条件进行转换,并且设计在各种状态内智能体该如何表现。如图2.2所示,在“寻找豆子”状态中,智能体可以随机游走,如果看到豆子就去吃掉;如果“鬼魂在附近”就进入“躲避鬼魂”状态。
图2.2 吃豆人的状态机模型
从这个例子中不难看出,如果游戏场景比较复杂或对智能体的行为和能力有比较高的要求,则会有非常复杂繁多的状态。分解出这些状态、编写状态内的行为、设计状态之间的转换条件无疑会给游戏开发人员带来巨大的工作量。
近些年来,随着机器学习和数据挖掘技术的快速发展,以数据驱动决策的方法开始在金融、安防、医疗等众多行业里崭露头角。这类方法可以通过大量的数据建立强大的模型帮助人们进行知识发现、模式识别、行为预测,极大地改变了原来的生产模式,提升了生产效率。在许多机器学习算法中,强化学习不仅能自动完成对数据的建模,还能依据这些数据直接产生决策。这使得通过机器学习模型自动控制游戏内的角色成为可能。
强化学习[1]的基本框架如图2.3所示。其中包含智能体、环境、反馈等部分。强化学习的过程是从框架中感知到所处的状态s,并且执行一个决策动作a,以改变自身的状态获得一个从环境中得到的反馈r。强化学习的目的是通过一系列的决策获得一个最佳的累积反馈。
图2.3 强化学习的基本框架
我们以《吃豆人》游戏为例来阐释一下相关概念。
智能体:在《吃豆人》游戏中,吃豆人即需要通过学习训练提高的智能体。吃豆人自身会有一系列的信息,如吃豆人当前所处位置、吃豆人与鬼魂的距离、吃豆人与豆子的距离、当前剩余的豆子数量等。
环境:游戏中的场景即智能体需要面对的环境,包括地图的地形、地图中的鬼魂、地图中的豆子分布等。
反馈:游戏中的反馈通常来源于4种类型(在实际应用中可以根据需要定义更多的反馈),如下。
● 与游戏胜利目标(吃掉所有豆子)相关的反馈,每当智能体吃掉豆子时都能获得一个正反馈。
● 由于游戏中存在鬼魂,鬼魂会把吃豆人吃掉从而阻止吃豆人完成目标,因此每当被鬼魂吃掉的时候,吃豆人就会获得一个负反馈。如果被鬼魂吃掉若干次,吃豆人可能就无法继续进行比赛,从而获得比赛失败的最终反馈。
● 游戏中存在可以改变局势的能量药丸,一旦吃豆人吃到能量药丸,吃豆人就会具备反吃鬼魂的能力,因此当吃豆人吃到能量药丸时能收到正反馈。
● 当吃豆人吃掉所有的豆子时,就取得了比赛的胜利,可以获得比赛胜利的最终反馈。
强化学习的过程要首先感知吃豆人所处的状态,通常来说可以从智能体自身和环境两个层面构建一组特征来描述当前智能体所处的状态。依据这些状态信息,吃豆人会选择一个动作(向上、向下、向左、向右)进行操作,从而获得一个新的状态。在这个过程中,吃豆人能够获得相应的反馈。强化学习的过程就是让吃豆人在地图中不断尝试各种策略,并不断优化自己的策略,最终通过一系列上下左右的操作在不被鬼魂吃掉的情况下吃完所有的豆子。
强化学习的过程可以由马尔可夫决策过程(Markov Decision Process,MDP)进行更严谨的表达。马尔可夫决策过程包括状态、动作、转换函数和奖励函数这样的一个四元组。一个决策过程是否具有马尔可夫性,主要取决于当前状态是否能够决定接下来的状态,而不需要任何历史信息。
基于此设定,强化学习的过程可以形式化地表达如下。
假设一条决策序列的长度为T,那么得到一条T步的轨迹的概率为:
式中,ρ为状态的初始状态分布;P为状态之间的转换概率;π为某状态下的动作策略分布。
期望的累积反馈(通常用符号J(π)代表)可以表示为:
强化学习的核心就是要求得:
π*=argmaxπJ (π)
这里的π*就是最优的决策策略。
通过《吃豆人》的例子可以看到,将游戏中智能体的制作建模成强化学习问题是比较自然直接的。具体来讲就是,首先将智能体置身于游戏场景中,游戏场景即环境;然后按照设计的目标为智能体与游戏的交互设计一些反馈,从而依此来引导智能体的行为,如在游戏中的得分等;最后只需要通过对强化学习问题求解,就可以得到一个能够完成设计目标的智能体。这个过程主要是通过机器自己学习的方式进行的,不需要现成的标记样本,也不用人为写规则,智能体能够产生的策略主要取决于游戏本身的设计和反馈的内容,这使得这些策略不再局限于设计者精心编码的几种类型,而能根据具体的游戏局势产生丰富的决策,并且随着训练的程度越来越深,智能体的决策水平会逐渐增强,达到甚至超过人类玩家。
风靡一时的围棋机器人Alpha Go就是基于这样的机器学习技术产生的[2],Alpha Go的成功为强化学习技术在游戏中的应用点亮了一盏明灯。
强化学习问题的求解有非常多的方法,目前比较流行的方法是基于策略梯度的。策略梯度可以将累计反馈作为目标,直接优化模型以获得累计反馈最大化的策略。
如果用参数θ来刻画策略,那么策略可以表示为πθ,目标是最大化期望的回馈。
通过梯度上升的方法可以求得合适的参数θ,
式中,∇θJ(πθ)为策略梯度,可以由产生的轨迹求得:
通过对轨迹样本求均值,就可以得到这个期望值,并依此通过不断地产生新的轨迹来不断地优化,最终得到最优的策略。
基于上述策略梯度的方法,根据游戏的玩法和特点,在竞速类、格斗类等游戏上,设计并建立了快速的游戏智能体生成流程。该流程只需要少部分的人工参与,即可以批量地生成大量的高质量游戏智能体。与此同时,为了增强这个生成流程的能力,我们探索了智能体的能力评估、能力分级、拟人性、多样性等方面的问题。
接下来,将分别从竞速类游戏和格斗类游戏两个品类来介绍强化学习在制作智能体上的应用。