Artificial intelligence 确定NPC在部分随机但受偏好影响时将采取什么行动?

Artificial intelligence 确定NPC在部分随机但受偏好影响时将采取什么行动?,artificial-intelligence,behavior-tree,Artificial Intelligence,Behavior Tree,我想让游戏中的角色执行部分随机但也受偏好影响的动作。例如,如果一个角色感到愤怒,他们大喊大叫的几率比讲笑话的几率要高。所以我在考虑如何确定角色将采取的行动。以下是我想到的一些想法 解决方案#1:迭代所有可能的操作。对每个动作进行随机滚动,然后将首选项值添加到该随机数。具有最高值的动作是角色执行的动作 解决方案#2:为一个动作指定一个数字范围,更有可能的动作范围更广。因此,如果随机滚动返回1-5之间的任意位置,角色将讲一个笑话。如果它返回6-75,他们会大叫。等等 解决方案#3:将所有操作分组并生

我想让游戏中的角色执行部分随机但也受偏好影响的动作。例如,如果一个角色感到愤怒,他们大喊大叫的几率比讲笑话的几率要高。所以我在考虑如何确定角色将采取的行动。以下是我想到的一些想法

解决方案#1:迭代所有可能的操作。对每个动作进行随机滚动,然后将首选项值添加到该随机数。具有最高值的动作是角色执行的动作

解决方案#2:为一个动作指定一个数字范围,更有可能的动作范围更广。因此,如果随机滚动返回1-5之间的任意位置,角色将讲一个笑话。如果它返回6-75,他们会大叫。等等

解决方案#3:将所有操作分组并生成分支树。他们会采取友好行动还是敌对行动?随机滚动(添加了偏好值)表示敌对。他们会进行身体攻击还是口头攻击?随机滚动显示为口头。继续往下走,直到你到达行动点

解决方案#1最简单,但效率很低。我认为解决方案3有点复杂,但不是更有效吗


有人对这个问题有更多的见解吗?3是最好的解决方案吗?有更好的解决方案吗?

如果要选择选项1或2,请查看随机结果的存储桶-请参阅。如果您使用树操作,您仍然可以使用一些相同的概念来确定树的哪个分支向下;然而,你会有更多的决定论内置,因为你的选项将限制你遍历树

如果我没记错的话,《无冬之夜》为NPC提供了一个相当不错的脚本引擎,它会使用随机概率来确定NPC在某些状态下会采取的一些行动,但这些状态本身更多地由NPC的脚本驱动(更像是一个状态机而不是一棵树,但概念是相似的)。例如,如果NPC正在行走,他们可能会停下来,也许会大笑,等等。但是如果他们受到攻击,他们会切换到战斗状态并留在那里


换句话说,这完全取决于你的动作是什么,以及你希望角色如何表现。

马尔可夫链,受真实用户动作的影响

来自维基百科:

马尔可夫链是一个离散的随机过程 使用 下一个状态仅取决于当前状态 国家

#1和#2很简单,但可能无法很好地扩展到更复杂的行为。行为树(#3)似乎是当今许多游戏中的首选系统。你可以在AiGameDev.com上找到一些演示文稿和笔记,例如和(Crytek的第一篇非常好)


在CPU使用的意义上,您可能不需要担心“效率”,因为这不太可能成为游戏中的主要瓶颈。减少程序员/设计师调整行为所需的时间更为重要。

哇,很高兴知道我提出的一个想法已经是一种广为接受的技术。非常感谢你的洞察力。很高兴这有帮助。网站上还有其他一些关于行为树的演示,但是你必须是付费会员才能访问它们。我没有看过他们,因为这不是我真正的游戏AI领域,所以我不能保证它的质量。我查了一下,它看起来像是一些非常高级的数学,是吗?我想这可能超出了我的理解力。这还不算太糟糕,你有几个州,NPC可以在三个州,你有一个3x3矩阵。每个元素都告诉您转换到其他状态(或返回到自身)的概率。你可以通过观察用户的活动来建立矩阵。如果他希望NPC不断改变某个动作的概率,那么马尔可夫链不是最有用的吗?听起来他是在追求静态的行为概率,所以马尔可夫链对我来说似乎有些过头了。事实上,它几乎和#2一样,但它可以导致更自然的行为。