博弈树(game tree)是一种特殊的根树,它是人工智能领域一个重要的研究课题。博弈树可以表示两名游戏参与者之间的一场博弈(游戏),他们交替行棋,试图获胜。

例如,考虑在 3×3 的九宫格棋盘上进行的“井字棋”游戏(tic-tac-toe)。

  • 最初,所有9个小方格都是空的(如下图(a)所示)
  • 两名游戏者A和B交替行棋——A选择一个空的小方格并写下符号×,而B则选择空的小方格写下符号〇
  • 首先使得己方符号中的3个在棋盘上形成直线(对角线、水平线或垂直线)者获胜(如下图(b)所示)。

该游戏中所有策略的集合可以由一棵巨大的根树来表示,树中的每个顶点都对应于棋盘的一个布局(configuration)。所谓“棋盘的一个布局”,是在游戏过程中通过标记棋盘上的小方格得到的。

但要注意,棋盘上的某些标记方案不是布局:4个小方格标记为×,1个小方格标记为¡的这种情况——由于游戏参与者是交替行棋的,所以永远无法达到这样的标记方案。

在此树中,根对应于所有小方格都为空的布局。继而,游戏者A行棋——她有9个选择。因此,根有9个孩子顶点,每个孩子顶点对应于在9个小方格之一内写下符号×。考虑根的一个孩子顶点v(棋盘上恰有一个符号×)。在v处,轮到游戏者B行棋。B有8个选择,因此v将有8个孩子顶点(参看下图,为简洁起见,忽略掉了对称的情况)。

不断画下去可以看到这棵树至多有9层,其中偶数层(根所在的最高层记做0层)对应着轮到游戏者A行棋,而奇数层对应着轮到游戏者B行棋。有三个同类符号位于同一直线上的顶点对应于有一个游戏者获胜的情况,这样的顶点是该根树的叶子。类似的,所有九个小方格都被标记的节点也是叶子节点(它可能对应于无人获胜的情况,如上图9.1所示)。这就是该游戏的博弈树,也称作对策树游戏树

虽然按照原本的规则,存在着双方都不获胜的情况(例如上上图(c)),但是为了简单分析起见,增加一个条件:当九个小方格都被标记且没出现三个同类符号位于同一直线上的情况时,判定为先手游戏者A获胜。于是,当游戏结束时(即,在叶子顶点处)必定有一名胜利者。

叶子顶点对应于游戏的最终状态,将其标记为10,分别对应于游戏者A获胜失败;对于游戏者B而言,数值的含义是相反的。

  • 对于下图(a)的局面而言,A只有一个选择,且之后将获胜,因此可以将树中对应于下图(a)的顶点也标记为1——表示A将获胜。
  • 之后简单分析一下下图(b)就会发现无论B怎样选择,最终他都将失利,而由A获得胜利,因此可以将树中对应于下图(b)的顶点也标记为1——表示此时无论B如何行棋,A都一定获胜。
  • 对于下图(c)而言,B怎样选择,他都可以获胜,因此可以将树中对应于下图(c)的顶点也标记为0——表示B一定可以获胜。
  • 但是对于下图(d),如果游戏者B做出了正确选择(左下角),那么他将获胜,而如果他做出了错误选择(右上角),那么他将失利。为了分析博弈树,将假定任何一名游戏者都不会犯错误。在这种假定下,可以将树中对应于下图(d)的顶点也标记为0——表示存在着游戏者B的获胜策略。
  • 如果将分别以下图(b)~(d)为根的子树展开的话(见下图(e)),会发现对应于轮到B行棋的奇数层顶点根据其孩子顶点的标号对自己进行标号的行为和逻辑运算“与”一致,因此可以用∧表示。

同样地可以分析得到,对应于轮到A行棋的偶数层顶点根据其孩子顶点的标号对自己进行标号的行为和逻辑运算“或”一致,因此可以用∨表示。

于是,该博弈树中的每个分枝点可以按层数分为∨顶点和∧顶点。对于一个∨顶点而言,如果它有一个子顶点标记为1,则该顶点的标记为1;如果它所有的子顶点标记均为0,则它的标记为0。对于一个∧顶点而言,如果它有一个子节点标记为0,则该顶点的标记为0;如果它所有的子顶点标记均为1,则它的标记为1。这种树通常称作与或树(AND–OR tree)

下面给出该博弈树中分枝点的0-1标记的解释。如果无论游戏者B如何行棋,都存在着游戏者A的获胜策略,则该节点被标记为1;而该节点标记为0则表示无论游戏者A如何行棋,都始终存在着游戏者B的获胜策略。处于偶数层顶点处的游戏者A应该选择任一将使得她获胜的孩子顶点(进行一步行棋)。然而,在奇数层顶点处,她的命运是掌握在游戏者B手中的。

当已知博弈树时,由于分枝点的0-1标记是由其孩子顶点的标记决定的,因此可以使用树的后序遍历来计算它们。


下面再看另一个简单的二人博弈:一堆石子共有5颗,甲乙二人轮流从中取石子,每人每次可以取走一颗或两颗,取到最后一颗石子者为负。这个二人博弈的(未标号)博弈树如(a)所示,顶点中的数值表示当时剩余的石子数。面临的布局为0的游戏者获胜。而(b)中顶点中的数值表示该博弈树的0-1标记,根的标记为0,表示乙存在必胜策略。


当然,先计算全部的博弈树再进行顶点标记的做法的开销比较大;而α-β剪枝(alpha-beta剪枝)方法可以将其大大降低。

HIT-软件构造blog5:博弈树相关推荐

  1. HIT软件构造Lab1--过程分析

    HIT 软件构造Lab1–过程分析 由于实验中要求代码必须是个人完成,所以这里仅提供方法和部分代码. 文章目录 HIT 软件构造Lab1--过程分析 1 实验目标概述 2 实验环境配置 3.1 Mag ...

  2. HIT 软件构造 lab3实验报告

    2020年春季学期 计算机学院<软件构造>课程 Lab 3实验报告 姓名 赵旭东 学号 1180300223 班号 1803002 电子邮件 1264887178@qq.com 手机号码 ...

  3. HIT 软件构造 Lab1

    2022年春季学期 计算学部<软件构造>课程 Lab 1实验报告 姓名 艾浩林 学号 120L021917 班号 2003006 电子邮件 2017869860@qq.com 手机号码 1 ...

  4. HIT软件构造lab1

    目录 1 实验目标概述 1 2 实验环境配置 1 3 实验过程 1 3.1 Magic Squares 1 3.1.1 isLegalMagicSquare() 1 3.1.2 generateMag ...

  5. HIT 软件构造 lab2实验报告

    2020年春季学期 计算机学院<软件构造>课程 Lab 2实验报告 学号 1180300223 班号 1803002 目录 1 实验目标概述 1 2 实验环境配置 1 3 实验过程 1 3 ...

  6. HIT 软件构造 多维度视图

    本节目标 从三个维度看软件构造的构成 用什么杨的模型/视图描述软件系统 将"软甲构造"看作"不同视图之间的转换" 软件构造的多维度视图 按阶段划分:构造时.运行 ...

  7. 哈尔滨工业大学hit软件构造实验lab1

    文章目录 1 实验目标概述 2 实验环境配置 3 实验过程 3.1 Magic Squares 3.1.1 isLegalMagicSquare() 3.1.2 generateMagicSquare ...

  8. HIT 软件构造LAB2

    2022年春季学期 计算学部<软件构造>课程 Lab 2实验报告 姓名 薄文 学号 120L020513 班号 2003004 电子邮件 604094538@qq.com 手机号码 181 ...

  9. HIT 软件构造 过程、系统、工具

    软件构造的一般流程 编码,重构,调试,测试,性能分析,代码评审,构建,发布 coding 从用途上划分:编程语言.建模语言.配置语言.构建语言 从形态上划分:基于语言学的构建语言.基于数学的形式化构造 ...

  10. HIT软件构造 软件测试 测试优先的编程

    测试基本概念 测试等级 单元测试 集成测试 系统测试 验收测试 各部分测试内容见下图 Static vs. Dynamic testing 静态测试:用眼睛看,评审.走查.检查等 动态测试:使用测试用 ...

最新文章

  1. 正式环境docker部署hyperf_应用部署 - Docker Swarm 集群搭建 - 《Hyperf v1.1.1 开发文档》 - 书栈网 · BookStack...
  2. Pytorch使用CPU运行“Torch not compiled with CUDA enabled”
  3. Diomidis Spinellis:有效的调试
  4. linux centos7 docker 安装 oracle
  5. java重绘table_java – 与JTable交互,使用新行快速更新
  6. ubuntu中vim编辑器的安装与基本使用
  7. uva1589 Xiangqi
  8. 在谷歌chrome中打开、编辑、保存金山 WPS Office完美解决方案!
  9. python版佛祖保佑
  10. 前端开发是什么以及我们要学习什么
  11. 51、C# 图片中非白色动态转换成红色,主要应用于指纹图片,呈现红色印泥效果
  12. Unity3d Ugui 20 Grid Layout Group Aspect Ratio Fitter
  13. 微信的账号连接服务器失败怎么回事,微信无法连接到服务器的原因和6个解决方法...
  14. 相机光学(十五)——如何提高相机标定的精度
  15. 关于android 栏沉浸式导航的一些事儿
  16. C#:实现凸包算法​(附完整源码)
  17. STM32智能家居项目(7)大总结
  18. 网址-m3u8-ts-多线程-mp4
  19. [vmware]另类解决vmware关闭win10死机或蓝屏问题
  20. 经销商窜货怎么办?最好的解决方案是?

热门文章

  1. Eclipse安装Pydev后Window-Preferences没有显示PyDev的解决办法
  2. systemd-logind导致ssh登录缓慢解决办法
  3. java redis订单_采用redis生成唯一且随机的订单号
  4. [附源码]SSM计算机毕业设计房屋中介管理系统JAVA
  5. 理工大学ACM平台题答案关于C语言 2555 压岁钱
  6. html有趣行为——直接通过id操作dom
  7. c语言1134 大整数加法,一年级下册数学教师用书.doc
  8. 释放企业数据价值,不可缺少这件利器
  9. RNA 4. SCI 文章中基于TCGA 差异表达之 edgeR
  10. Android SDK AVD Manager