游戏开发中的人工智能(十二):概率概论

接上文 游戏开发中的人工智能(十一):规则式 AI

本文内容:游戏开发人员时常使用简单的概率,使游戏较难预测。这种简单的不可预测性让游戏开发人员可以拥有对游戏的实质性控制。本章要谈这种用途的基本概率,顺便作为更高级方法的基石。

概率概论

开发人员在游戏中使用的概率可分为:击中概率、损害概率以及性格概率(比如攻击或逃跑倾向)等。游戏使用概率可以增加一些不确定性。本章我们要学习概率的基本原理,讨论如何把这些原理用在游戏软件 AI 中,以增添某种不可预测性。设置本章的另一个目的是作为下一章内容的基础,下一章要讨论不确定状态下的决策以及贝叶斯分析法。

如何在游戏中使用概率

贝叶斯分析法可在不确定状态下做决策,其基础和概率密不可分。遗传算法也会在某种程度上用到概率。例如,求突变率的运算。即使是神经网络,也要用到概率方法。

随机性

产生随机数的标准C 函数是 rand( ),会在 0 和 RAND_MAX(默认为32727) 之间产生随机整数。

在0和99之间取随机数,可以用 rand( )%100,想要在0和N-1之间取得随机数,就用 rand( )%N。

在调用rand( ) 之前,要调用 srand(seed) ,给随机数产生一个种子数(seed)。

举个例子,假设要让游戏中的单位移动多一些随机性。我们可以定义,当该单位面对挑战时,有25%的概率往左移,有25%的概率往右移,还有50%的概率往后退。有了这些概率,便可以在0~99之间取随机数。0~24为往左移,75~99往右移,25~74(含25和74)作为后退。

击中概率

概率在游戏中另一种常见的用法是,用来代表生物或玩家在战斗中击中对手的机会。一般而言,游戏开发人员会根据玩家及其对手的特点,定义击中概率。例如,在角色扮演游戏里,你可以设敏捷度一般的玩家,有60%的概率可用刀子刺中对手。

角色能力

另一个在游戏中使用概率的实例是,定义角色类型或生物种类的能力。例如,假设你有一个角色扮演游戏,玩家可扮演剧中人物的角色有法师、斗士、游人或侠客。每个类型和其他类型相比,都有其优缺点,你可以在表中列举出技能及概率,以说明每个类型的特点。表12-1 就是这种角色类型能力表的简易范例。

游戏开发中的人工智能(十二):概率概论游戏开发中的人工智能(十二):概率概论

这个表说明了每种技能,都具有相应的成功概率。角色类型的能力是有条件的,例如,法师使用法术的成功机会是90%,斗士却只有5%。实际上,这些概率会在每个玩家的总类型等级上再加条件。

状态转移

可以将概率和有限状态机相结合,例图12-1 是生物的可能状态。

游戏开发中的人工智能(十二):概率概论

将概率和有限状态机结合。例如条件是“玩家出现在眼前,手里拿着武器”这类事件,我们有50%的概率攻击玩家,20%的概率逃离此场景,10%的机会躲起来。

适应力

我们可以随着游戏的进行而更新某些概率,以促进计算机控制的单位学习或适应的能力。

例如,在游戏中,你可以收集某种生物和某类玩家之间接触的次数和结果的统计资料。然后,立即计算生物和玩家遭遇后的死亡概率。基本上,这是求概率很常用的方法。有了死亡概率之后,就可以决定以后是否和这类玩家战斗。如果死亡率较高,表示此类玩家会杀死这种生物,就可以让这种生物避开该类玩家。

何谓概率

标准概率

标准概率指的是事件和可能性发生的概率或可能的结果。给定一个事件E,在总数为N的可能结果中,会发生 n 种结果,则此事件发生的概率 p 为:

p=P(E)=n/N

P(E) 是该事件的成功率,而该事件的失败率就是 1-P(E)。

频率解读

频率解读也称为相对频率。考虑的是事件和样本。如果某实验做了N次,而某事件E 发生了n次,则E出现的频率就是:

P(E)=n/N

主观概率

主观概率是一种分析手段,其值介于0到1之间,也就是说某人根据其知识、经验或判断,认为某特定事件发生的机会。

主观概率随处可见,例如“明天可能下雨”“我通过考试的可能性很大”

概率规则

正式的概率理论有几条规则,制约着概率的计算方式。我们要讨论这些规则,替下一章做铺垫。下面我们只做理论叙述,不提供特定实例。下一章会看到这些规则的运用。

规则1

某事件的概率P(A),必为0和1之间的实数。

规则2

是规则1的扩充,如果S代表该事件所有的可能性,则S的概率为1。

规则3

如果事件A发生的概率是P(A),而A不会发生的事件记为A’,则其概率P(A’)为1-P(A)。这条规则上说,某事件要么发生,要么不发生。

规则4

如果两个事件A和B互斥,则任何时间,只有其中一个事件可以发生。

规则5

如果两个事件A和B**并不互斥,A和B同时发生的概率**为:

游戏开发中的人工智能(十二):概率概论

规则6

如果两个事件A和B是独立的,也就是说某事件的发生,不依赖另一事件是否发生,则事件 A 和 B 两者皆发生的概率为:

游戏开发中的人工智能(十二):概率概论

条件概率:贝叶斯规则

当事件不独立时,就说是有条件的。我们可以利用贝叶斯分析法解决这类问题,下一章就会谈,贝叶斯分析法的基础是条件概率。

如果两个事件时不独立的,即事件A依赖B是否发生。我们就不能用规则6适合独立事件的公式。

假设有两个相互关联的事件,我们把B发生后,A发生的概率写为 P(A|B),同样的,把A发生后,B发生的概率写为 P(B|A),注意:P(A|B) 不一定等于 P(B|A)。

事件A发生后事件B发生的条件概率,等于事件A 和 B 都发生的概率再除以事件A 发生的概率:即

游戏开发中的人工智能(十二):概率概论

我们知道,P(A ∩ B) 也等于 P(B) * P(A|B),所以我们可以把上述公式里的P(A ∩ B) 换掉,如下所示:

游戏开发中的人工智能(十二):概率概论

这就是所谓的贝叶斯规则。下一章我们将详细叙述贝叶斯规则。

转自: Jurbo的博客

--电子创新网--
粤ICP备12070055号