📜  多人游戏中的最优决策

📅  最后修改于: 2022-05-13 01:58:07.858000             🧑  作者: Mango

多人游戏中的最优决策

当指定 MAX(我们这边的玩家)在初始状态下的移动,然后 Max 移动到由 MIN 产生的每个可能响应的状态时,最优解成为一种或有策略。然后 MAX 在由 MIN 对这些移动的每个可能响应所产生的状态下移动,依此类推。

从当前状态,上图中的极小极大方法计算极小极大选择。它直接使用每个后继状态的极小最大值的简单递归计算来实现定义方程。随着递归展开,它一直向下延伸到树的叶子,然后通过树备份最小最大值。例如,在下图中,该算法递归到左下角的三个节点,并使用 UTILITY函数确定它们的值分别为 3、12 和 8。然后它取这些值中的最小值,在本例中为 3,并将其作为节点 B 的备份值返回。使用类似的方法获得 C 的 2 和 D 的 2 的备份值。最后,我们将 3、2、2 的最大值相加,得到根节点的备份值 3。

极小极大算法深度优先从上到下探索博弈树。如果树的最大深度为 m 并且在每个点 (bm) 有 b 个合法移动,则极小极大方法的时间复杂度为 O。对于一次创建所有动作的算法,空间复杂度为 O(bm),而对于一次生成一个动作的算法,空间复杂度为 O(m) 时间成本对于真实游戏显然是不切实际的,但是这种技术是游戏数学分析和更实用算法的基础。

许多流行的游戏支持多个玩家。让我们看看如何将极小极大概念应用到多人游戏中。从技术的角度来看,这是基本的,但它引入了一些有趣的新哲学挑战。首先,我们必须将每个节点的单个值替换为值向量。例如,与玩家 A、B 和 C 的三人游戏中的每个节点都与向量 相关联。从每个参与者的角度来看,该向量表示终止条件的效用。在两人零和游戏中,二元素向量可以简化为单个值,因为这些值总是相反的。 UTILITY函数返回一个实用程序向量,这是完成此任务的最简单方法。

现在必须考虑非终结状态。在下图所示的博弈树中,考虑标记为 X 的节点。玩家 C 决定在这种情况下要做什么。这两个选项都会导致最终状态的效用向量分别为 vA = 1、vB = 2、vC = 6 和 vA = 4、vB = 2、vC = 3。 C 应该先走,因为 6 大于 3。如果到达状态 X,进一步的游戏将导致最终状态,效用 vA = 1、vB = 2 和 vC = 6。因此,这个向量是X 的后备值。

玩家在 n 处选择的具有最高值的后继状态的效用向量始终是节点 n 的备份值。任何玩过《外交》这样的多人游戏的人都会很快意识到,比两人游戏中发生的事情要多得多。多人游戏有时包括形成正式或非正式联盟的个人。随着游戏的进行,联盟会形成并摧毁。我们想到的问题是如何理解这种行为。联盟是多人游戏中每个玩家最优策略的自然结果吗?事实证明,它们可以是。考虑以下场景:A 和 B 处于弱势地位,而 C 处于强势地位。然后,与其互相攻击,不如让 A 和 B 都攻击 C。否则,C 将单独摧毁它们中的每一个。以这种方式,协作从纯粹的自私行为演变而来。当然,一旦 C 被联合攻击削弱,伙伴关系就失去了意义,A 或 B 都可能破坏这种安排。在某些情况下,明确的伙伴关系只会将无论如何都会发生的事情具体化。在其他情况下,破坏联盟会带来社会耻辱,因此玩家必须权衡破坏联盟的直接利益与被视为不值得信赖的长期成本。

如果游戏不是零和游戏,则只需两个参与者就可以进行协作。假设存在效用 vA = 1000 和 vB = 1000 的终端状态,其中 1000 是每个参与者可获得的最高效用。最好的方法是双方都尽其所能达到这一点——也就是说,双方自然会合作以实现互惠互利的目标。