机器博弈:非零和博弈下的叶值表剪枝

摘要:

  在alpha-beta剪枝的情况下,修剪博弈树的算法通常依赖于一个零和;在投机剪枝等多人剪枝算法的情况下,则依赖于常和博弈。虽然现有算法可以对非零和博弈进行剪枝,但剪枝的有效性远远低于对常和博弈的剪枝。我们引入叶值表的思想,它在博弈树中存储可能的叶值的枚举。使用这些表,决定是否有可能删除树中的一个给定节点。叶值表也使它更容易合并单调启发式增加修剪。在Spades的3人完全信息变量中,我们能够将节点扩展减少两个数量级。

  Alpha-beta和其他修剪方法使用非常简单的线性测试作为决策规则,以确定它们是否可以修剪。对于零和游戏来说,这些决策是最优的。也就是说,他们会对是否可以进行修剪做出完美的决定。然而,对于非零和游戏来说,当前的技术并不能抓住所有修剪的可能性。为了在非零和博弈中进行最优的修剪,我们必须对博弈树中可能出现的值的空间有一定的了解。

  为了在非零和博弈中进行最优修剪,我们必须了解博弈树中可能出现的可能值的空间。在棋牌游戏中,得到所有结果是相对容易的。此外,这些技术可以通过合并来自单调启发式的信息来进一步增强剪枝。

什么是剪枝?

剪枝是希望在搜索的时候,根据已搜索的结果,剔除超出最优解的分支,那么意味着这个分支下的所有节点都不需要考虑了,大大降低搜索的时间

Alpha-beta

Alpha-beta伪代码:
机器博弈:非零和博弈下的叶值表剪枝_第1张图片
β − α < 0 \beta - \alpha < 0 βα<0时可以进行剪枝。将其视为线性分类器很有用,因为它与线性函数进行一次比较以确定是否可以进行修剪。

初始化β = +∞ ,下限α = -∞,整个搜索树采用中序遍历,从左下角开始,节点选出最小值3
机器博弈:非零和博弈下的叶值表剪枝_第2张图片
然后继续往上,取了3,那么得出如下结果:

对于B节点,是Min节点且叶子结点为(3,8), 所以更新上限β = 3 ,下限α = 负无穷

A节点是Max节点,根据B点的3,更新上限β = 无穷 ,下限α = 3

然后搜索C节点,α、β继承于父节点,上限β = +∞ ,下限α = 3,此时根据C的子节点2更新β = 2

由于α > β,说明最优解不可能从这个节点的子节点中产生,所以我们不再继续搜索它的其他子节点,如下图

机器博弈:非零和博弈下的叶值表剪枝_第3张图片
同理,计算其他节点,如下图

机器博弈:非零和博弈下的叶值表剪枝_第4张图片

Max n ^n n

  Max n ^n n是对任意数量的玩家的极小极大的推广。在有 n 个玩家的 Max n ^n n 树中,树的叶子是 n 个元组,其中元组中的第 i 个元素是第 i 个玩家在该位置的效用。在树的内部节点处,玩家 i 要移除的节点的 Max n ^n n 值是该节点的子节点的 Max n ^n n值,该节点的第 i 个分量最大。在博弈树的叶子节点上,可以应用精确或启发式评估函数来计算在博弈树中备份的 n 元组。

  在这棵树中有三个玩家。要移动的玩家被标记在每个节点内。在节点 (a),玩家 2 移动。玩家 2 向左移动可得 3 分,向右移动可得 1 分。所以,玩家 2 会选择左边的分支,节点 (a) 的 maxn 值为 (1, 3, 5)。玩家 2 在节点 (b) 选择右分支的行为类似,并且在节点 © 向左侧打破平局,选择左分支。在节点 (d) 处,玩家 1 选择节点 © 处的移动,因为 6 大于节点 (a) 和 (b) 处可用的 1 或 3。
机器博弈:非零和博弈下的叶值表剪枝_第5张图片

others

文中还提到的其他剪枝方法如shallow pruning

  BUT在迄今为止讨论的所有剪枝算法中,常用线性分类器做剪枝决策。当游戏是零和或常数和时,这很有效,但在非常数和游戏中,线性分类器是不够的。当游戏是非常数和时,max n ^n n 个值的空间边界不是由直线定义的。为了能够进行最佳剪枝,我们需要知道可行的 max n ^n n 值的确切边界,以便在给定该区域之外的边界向量时始终可以进行剪枝。

Leaf-Value Tables

  叶值表的是一个包含游戏中叶子节点所有结果的表。给定了叶值表,就可以采取更加准确的分类器代替线性分类器,因此,我们需要一种有效的方法来查找和计算区域。
叶值表剪枝伪代码如下:
机器博弈:非零和博弈下的叶值表剪枝_第6张图片
调用这个函数来对是否剪枝做决策,叶值表是在决策之前计算的,其中包含博弈游戏每个可能的结果以及玩家排名。函数输入为当前的边界向量以及玩家分数的任意启发式上限,启发式并不能加快检查我们是否可以剪枝,但它可以减少叶值表的有效大小,使我们更有可能进行剪枝。

  1. 进入函数
  2. 判断是否已经在哈希表中
  3. 如果是:返回哈希查找
  4. 遍历叶值表中的entry
  5. 如果叶值表中的entry的结果大于启发式,我们可以忽略该输入,因为该结果不会出现在当前子树中。
  6. 如果entry的范围小于边界向量,continue;
  7. 加入哈希表并返回false
  8. 如果所有的entry都遍历完,说明可以剪枝,加入哈希表并返回true

作者证明当游戏是非零和时,可以在额外剪中获得收益,但收益仍依赖于具体情况。

conclusion

在本文中,作者展示了如何使用博弈树中可能的叶值枚举(称为叶值表)将经典剪枝算法中使用的线性分类器更改为非零和所需的任意分类器游戏。这种技术在像黑桃这样的纸牌游戏中效果特别好,作者看到使用常数和评估函数扩展的节点数量比之前的最佳结果减少了 100 倍,同时游戏质量也有所提高。这项工作扩大了搜索两人和多人游戏的效率限制。最近将对手建模应用于两人游戏的结果并未取得巨大成功。在多人游戏中,作者已经证明,如果没有好的对手模型可用,深度搜索并不总是有用的。但是,给定一个合理的对手模型,这项工作能够使用可能的最佳评估函数,并且仍然在博弈树中搜索到合理的深度。未来将继续解决更广泛的问题,即什么样的对手模型是有用的,以及我们可以对我们的对手做出什么样的假设而不会对比赛表现产生不利影响。最终目标是准确描述在哪些情况下应该使用 maxn,以及在哪些情况下应该使用其他方法。

参考:

  1. PAPER:Leaf-Value Tables for Pruning Non-Zero-Sum Games
  2. 极大极小α-β剪枝算法1 极大极小α-β剪枝算法2

你可能感兴趣的:(人工智能)