摘要:

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

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

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

什么是剪枝?

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

Alpha-beta

Alpha-beta伪代码:

当β−α<0\beta - \alpha < 0β−α<0时可以进行剪枝。将其视为线性分类器很有用,因为它与线性函数进行一次比较以确定是否可以进行修剪。

初始化β = +∞ ,下限α = -∞,整个搜索树采用中序遍历,从左下角开始,节点选出最小值3

然后继续往上,取了3,那么得出如下结果:

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

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

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

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


同理,计算其他节点,如下图

Maxn^nn

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

  在这棵树中有三个玩家。要移动的玩家被标记在每个节点内。在节点 (a),玩家 2 移动。玩家 2 向左移动可得 3 分,向右移动可得 1 分。所以,玩家 2 会选择左边的分支,节点 (a) 的 maxn 值为 (1, 3, 5)。玩家 2 在节点 (b) 选择右分支的行为类似,并且在节点 © 向左侧打破平局,选择左分支。在节点 (d) 处,玩家 1 选择节点 © 处的移动,因为 6 大于节点 (a) 和 (b) 处可用的 1 或 3。

others

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

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

Leaf-Value Tables

  叶值表的是一个包含游戏中叶子节点所有结果的表。给定了叶值表,就可以采取更加准确的分类器代替线性分类器,因此,我们需要一种有效的方法来查找和计算区域。
叶值表剪枝伪代码如下:

调用这个函数来对是否剪枝做决策,叶值表是在决策之前计算的,其中包含博弈游戏每个可能的结果以及玩家排名。函数输入为当前的边界向量以及玩家分数的任意启发式上限,启发式并不能加快检查我们是否可以剪枝,但它可以减少叶值表的有效大小,使我们更有可能进行剪枝。

  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

机器博弈:非零和博弈下的叶值表剪枝相关推荐

  1. Python 求解非零和博弈的纳什均衡策略——以虚构的两个企业之间的商品价格博弈为例

    系列文章目录 目录 系列文章目录 文章目录 前言 一.模型的建立 二.算法的步骤 三.代码的实现 四.运行的结果 总结 前言 博弈论是研究具有斗争或竞争性质现象的数学理论和方法,它考虑游戏中的个体的预 ...

  2. 非完备信息的机器博弈-麻将篇

    非完备信息的机器博弈-麻将篇 前言 整个程序的设计思路 Expecitmax搜索 关于吃碰杠决策的设计 前言 本文是在我参加完八月的'2021年中国大学生计算机博弈大赛暨第十五届中国计算机博弈锦标赛' ...

  3. 深度学习和机器博弈如何结合_对抗机器学习的博弈论方法

    深度学习和机器博弈如何结合 Artificial Intelligence has known a great success in recent years as it provided us wi ...

  4. 零和博弈(Zero-Sum Games)与非零和博弈(Non-Zero-Sum Games)

    零和博弈(Zero-Sum Games)与非零和博弈(Non-Zero-Sum Games) 定义 典型例子 思考(个人观点) 参考文献 定义 零和博弈 在博弈收益(支付)结果上看,一方所部就是另一方 ...

  5. 成本与体验的“非零和博弈”

    随着移动互联网和智能终端的普及,越来越多的海内外互联网企业开始发力短视频业务.在短视频用户全球化,短视频产品及内容消费井喷式增长的今天,用户开始逐渐对体验有了越来越高的要求.为了更清晰更流畅地播放,用 ...

  6. 机器博弈游戏规则 德扑和德扑变种

    机器博弈游戏规则 德扑和德扑变种 术语 HULH:(heads-up limit Texas hold'em) FHP:flflop hold'em poker NLLH (No-Limit Ledu ...

  7. 第2届中国机器博弈锦标赛

    10月4号,第2届中国机器博弈锦标赛在重庆工学院开幕,去年首次中国中国机器博弈锦标赛只有中国象棋项目,但后来举办了影响很大的象棋人机对抗赛,后来比赛前5名的程序总成绩3比2战胜了象棋大师们.而今年比赛 ...

  8. 博弈论小课堂:非零和博弈(实现双赢)【纳什均衡点】

    文章目录 引言 I 非零和博弈 1.1 囚徒问题 1.2 博弈中双方的收益矩阵 II 在现实中找均衡点 2.1 博弈通常不是一次性的,而是反复进行的 2.2 博弈论讲的都是阳谋的策略 2.3 人类还处 ...

  9. 非归档下oracle的备份和恢复

            数据库处于非归档状态,其联机日志循环覆盖使用,这意味着如果数据库需要进行介质恢复应用相关归档,又由于非归档导致归档文件不存在,那么此时数据库只能执行基于取消的恢复,回退整个数据库到上一 ...

最新文章

  1. 分享一个OTA测试服务器,可以用来测试esp8266的http update功能
  2. bio linux 创建_不断升级,Java之BIO、NIO、AIO的演变
  3. 计算机网络的寻址问题ARP协议(Mac地址 ip地址)
  4. android sqlitejian监听,tencent/sqlite.md · zhoujian/AndroidInterView - Gitee.com
  5. effective mysql之备份与恢复_Effective MySQL之备份与恢复
  6. Zookeeper实现Master选举(哨兵机制)
  7. 狼道:强者的成人礼(第2版)
  8. php用空格分隔的字符串对比,探讨各种PHP字符串函数的总结分析
  9. 关于前端开发,你真的了解吗?
  10. 在 MVC 控制器中使用 构造函数时行依赖注入 (IoC)
  11. 阿里云Serverless,全球第一!
  12. z-index取值范围
  13. 让别人关机!(VB语言)
  14. 解决项目中使用kotlin不能直接引用xml中id
  15. 微信小程序集合3(百度小说+电商+仿哗哩哗哩小视频+码绘本跟读+科学计算器+身份证查询+天气+投资理财微+外卖+在线音乐排行)
  16. python123程序设计题说句心里话a_C程序设计基础(2019年春)-中国大学mooc-试题题目及答案...
  17. html封面设计图片手绘大全,封面设计铅笔画手绘图片
  18. linux桌面 高分屏,让Linux下GNOME桌面、GDM登录界面适应高分屏的方法
  19. IPA签名是怎么回事儿?
  20. 设计模式-抽象工厂模式实例(二)

热门文章

  1. 【自】2014会计准则科目和主要账务处理对照
  2. WPF 仿微信聊天气泡
  3. ECN Trade:全球经济疲软,美国国债成新宠
  4. flying-saucer生成PDF
  5. 用纯python脚本玩转UU加速器
  6. 基于Vue+ElementUI的省市区地址选择通用组件
  7. GIS应用技巧之缓冲区分析
  8. linux中一次显示一页内容的命令
  9. Vue+antd中关于发送请求时候的Loading遮罩层闪烁无法覆盖问题
  10. Ubuntu18.04如何安装汉语(拼音)输入法