这一部分先提一下一些基本的目前广泛用于游戏中的AI算法。这里最好现有点机器学习相关知识,不然可能会不知所云。后面提到具体算法我会尽量列出一些参考文献,例子也继续在吃豆人上面举例。
目前主流方法主要有,专门的行为表达方法例如有限状态机,行为树,和一些基于单元的AI。
有限状态机FSM不用多说,就是一个状态在某种条件下为迁移至另一种状态,这些状态和条件都是之前预设好的,下图是FSM在吃豆人的一个例子,FSM后面就不再说了,其他的算法在后面会继续提到。树查找算法指的是搜索行为函数的空间,然后见了可能动作顺序的树,常见的有Alpha-Beta和蒙特卡洛搜索树。演化计算指的是基于群体的全局最优求解,例如遗传算法,演化策略,粒子群最佳化演算法。监督学习指的是学习已有的数据集模型,数据集是有一些数据实例与相应的目标值组成,最常见的是神经网络。增强学习则主要是解决动作序列与奖励与惩罚的关系,不同于监督学习的值。无监督学习也是需要数据集,只不过数据集不再需要目标值,常见的有k均值,层次聚类等。还有一些其他的典型算法如TD-learning(时间差学习法)及其一个注明特例Q-learning。目前,神经演化算法和带有人工神经网络的TD学习是最受欢迎的AI算法。
那么如何在游戏中使用这些算法呢,首先要做的就是表述。没错,就是要将当前的游戏状态以及要执行的动作表达成数字才能用这些算法进行计算,例如FSM就是用图表示,行为树是用树来表示。这也是游戏AI第一步也是最难得一步之一。好的表述也可以带来很好的实验与实践效果,游戏AI特征的质量的问题也是需要注重解决的问题。
这里在介绍一个东西,效用(Unity),Unity是一个度量,通常可以被看做是一个函数,用于帮助算法去决定好的路线。为了达到这个目的,效用函数采集查找并收集空间中“有好处”的信息,对当时的情景进行大致的评估。例如,在象棋对局中,如果走的这一步会是“将”面临危险那么这一步的unity函数就会为0,而如果下一步可以让对面的“将”处于危险,那么这时的unity函数就会很大。所以unity函数的作用就是要最大化利益,最小化风险与错误。这些类似于增强学习