博弈树

3.2 博弈树与极小化极大算法(Minimax) 博弈树是描述博弈过程中所有可能状态的树形结构,包含以下要素:根节点(Root):初始游戏状态(如棋盘的初始布局)。内部节点(Internal Node):中间决策点,表示玩家需要选择动作的位置。边(Edge):玩家的动作(如移动棋子、落子)。叶子节点(Leaf):终局状态,标注每个玩家的收益值(Utility)。 3. 博弈树的特性 完全性:覆盖所有可能的动作路径。对称性:若多个路径导致相同状态,可合并节点(但通常不合并以简化实现)。深度:树的层数等于最大动作步数(如井字棋最多9步)。对抗性 阅读详情
探讨一下难度较大的棋类游戏程序,比如国际象棋和西洋跳棋等等。用这些程序来同人或其他程序对弈。然而,有些程序是把计算机精心设计成一个棋盘,人们可以在其上对弈(或者是一种单人玩的棋盘游戏)。这种程序更接近于系统模拟的领域,而不属于人工智能的范畴。我们此处所要介绍的却是让计算机能够“思考”如何下棋。

假定有两个人或者两台机器在下棋。我们把其中一名称为棋手,另一名称为对手。而我们始终从棋手的角度来观看这场竞赛。这样一来,如果棋手赢了、对手输了,我们就说这盘棋赢了;如果棋手输了、对手赢了,我们就说这盘棋输了。 

假设现在该轮到棋手走了。在大多数情况下,棋手对这步棋可以有若干种选择。对于棋手的每一种选择,对手也有若干可供选择的相应棋步。对于棋手的每一步棋以及对手的每一步回棋,棋手又有自己进一步的选择。显然,这里所遇到的分支情况同我们在状态搜索中遇到的情形相同的。 
  
实际上,我们可以把一盘棋想象成具有一个入口(起始位置)和一组出口的迷宫。有些出口标上了赢的记号;有些出口标上了输的记号;而有些出口标上了和局的记号。在入口处,棋手选择某条路径起步,在路径的一个岔口,对手挑选了自己的路径回步,棋手和对手就这样轮流选择自己的路径走下。棋手总是力争通向胜利的出口,而对手却总是把棋路引向输的出口。有时双方各自的努力不相上下,最后在和局出口结束棋局。或者他们一直在这个迷宫中徘徊,直到形势变得非常明朗:双方循环兜圈子,这时只好双方握手言和。

因此,下棋游戏同状态图搜索是相似的,就是要在状态图中找出一条从初始状态到目的状态的路径。但是,它们之间却有一个很大的差别。在状态图搜索中,总是由一名选手来选择下一步往哪走。而在棋类的对弈中,棋手只有一半选择的权利,另一半由对手作出决定。棋手是一直朝着目标努力,而对手却是通过它每一步棋对此设置障碍。寻找机会把棋手从通往目标的路径上引开。 

对于任何一种博弈竞赛,我们可以构成一个博弈树。它类似于状态图和问题求解搜索中使用的搜索树。博弈树的结点对应于某一个棋局,其分支表示走一步棋;根部对应于开始位置,其叶表示对弈到此结束。在叶节点对应的棋局中,竞赛的结果可以是赢、输或者和局。   

所谓棋局,就是所有那些必须记录下来的信息。根据这些信息,比赛在按计划暂停以后能够得以继续进行下去。显然,这些信息包括了此时棋子在棋盘上的位置以及指出下一步是轮到棋手走,还是对手走。

博弈树是一棵与/或树,不同于在状态搜索中使用的纯粹的或树。


其原因是:当轮到棋手走时,他可以决定选择哪一步棋走。如果起码有一步可以担保棋手能够到达赢的棋局,那么棋手就会选择这一步并保证能够取胜。因此对应于棋手走的节点是一个或节点。   

当轮到对手走时,选择是由对手决定的。棋手没有任何选择的权利。只有对手的所有可以走的棋布都会导致棋手赢时,这时棋手才能保证会赢。因此,对于对手走的结点是一个与节点。   


对于一场经过深思熟虑地棋局来说,其博弈树是非常庞大的(国际象棋来说有10^120个节点)。以至于不可能把这样大的博弈树装入计算机,也不可能在任何合理的、有限的时间内进行详细的搜索。尽管如此,首先深入的考察一下完整的博弈树,然后再看看如何来修正我们的原来的想法,以便把搜索树修整到一个合理的范围。这样做还是很有意义的。

博弈策略   

假设我们对所讨论的博弈问题构造了一棵完整的博弈树,我们希望能从中找出棋手应采用的策略。这种策略应当确保棋手会赢,或者起码能够得到和局的结果。

首先我们把该博弈树的每一个节点标上w(对应于赢)、d(对应于和局)或者l(对应于输)。如果当前的棋局对应于标有w的节点,那么就存在一种策略可以担保棋手会赢;如果结点标的是d,那么除非对手失误,否则棋手最好的前景就是争取和局;如果节标的是l,那么棋手只好认输了,除非对手下错了棋。 

对一个节点标以w、d和l的过程,可以如下进行。

我们的讨论从叶节点开始,每一个叶结点对应于一场棋赛的结束的终局。根据博弈的规则,叶节点确定了棋手的赢,输和和局。这样,我们就把每一个叶节点标上相应的值。   

现在我们按照从叶往根本方向进行研究。按照每一节点的子节点的标号来标记该节点本身。节点标注的规则如下: 轮到棋手走步时,如果该节点的子节点至少有一个标有w,那么,该节点就标为w;如果所有子节点都标为l,那么该节点标为l。其他情况标上d。轮到对手走步时,如果该节点的子节点都标上了w,那么该节点标为w;如果有一个以上的子节点标上了l,那么该节点标为l。其他情况标上d。

根节点的标注表明,在对手不失误的情况下,棋手能够得到的最好结果。如果根节点为w,那么棋手稳操胜券;如果为l,那么对手一定能击败棋手;如果为d,那么在对手不失误的条件下,棋手能够得到的最好结果就是平局。

一场比赛,如其根节点能够标上w或l,并且是很简单易于分析的话,就可以成为骗人的棋局。该节点标作w的话,无论是谁先走,先走者都能赢;根节点为l的话,无论谁后走,则后者也一定能赢。当然需要采取正确的策略。骗子知道哪一方面能够赢,以及要赢所需要采用的策略。而这些,受骗者肯定是不知道的。

棋手的策略应该遵循这样的原则:如果有一步棋能走到节点为W的棋局,那么就应当走这步棋;如果所有的棋步都通向节点为l的棋局,那么就只好放弃这盘棋认输。其他情况下,就要走到标为d的节点。

对手采取的策略正好相反:如果有一步棋能走到节点标为l的棋局,那么就下这步棋,如果所有的棋步都通向节点为w的棋局,那就只有放弃认输。其他情况下,就要走到标为d的节点。 
当有两条以上的路径都能通往l节点,或者有两条以上的路径通往d节点时,棋手所采取的策略就不再是决定性的了。在实际对弈中,棋手总是想选择w节点,达到了w节点,就使得往后的对弈过程变得简单了。这样做就能减少棋手失误以致失去优势的机会。基于同样的理由,棋手在达不到节点时,应该选择d节点。这样就可以导致最复杂的情况产生。希望对手在这种情况下失误以便使自己重新得到优势。到现在为止,我们的讨论还是很不充分的。因为在所有的w节点或者所有的l节点之间,我们并没有给出任何差别。
人工智能技术导论——博弈树搜索 我在之前整理过一篇博客关于博弈论和纳什均衡的几个例子https://www.cnblogs.com/wkfvawl/p/11725263.html 这里来介绍博弈树搜索。 一、博弈树的概念 在博弈过程中, 任何一方都希望自己取得胜利。因此,当某一方当前有多个行动方案可供选择时, 他总是挑选对自己最为有利而对对方最为不利的那个行动方案。 此时,如果我们站在A方的立场上,则可供A方... 阅读详情

相关推荐

五子棋智能算法-博弈树算法思想详解(一)

学习这个算法之前必会链表 关于链表看这两篇博文 https://blog.youkuaiyun.com/viafcccy/article/details/84502334 https://blog.youkuaiyun.com/viafcccy/article/details/85041942 在五子棋下棋中 我们最容易想到的算法就是对于棋局的推演 从而找到一种最佳的情况去使棋局向这个方向发展 为了简单思考...

viafcccy的博客 3万+

第四章 博弈树game tree

博弈树 game tree、 perfect-information game (N, A, H, Z, χ, ρ, σ, u)(N,~A, ~H, ~Z,~\chi, ~\rho, ~\sigma, ~u )(N, A, H, Z, χ, ρ, σ, u) N:人数 A:每个人的行动集合 Z:叶子节点。 H:博弈树中除了叶子节点的其余节点集合。  χ~\ch

longzu233的博客 1万+

并行博弈树搜索算法-第1篇 什么是博弈树搜索算法

博弈树的搜索是人工智能领域一个重要的研究课题.许多完全信息的二人零和博弈问题都可以用博弈树搜索算法解决。 那么什么是二人零和博弈问题呢? 有一系列的博弈问题拥有以下性质[1]: 1. 有两个对抗者:对抗者1和对抗者2. 2. 两个对抗者交替移动.在博弈的每一个位置,对于正在移动的参与者,都存在有限个可能的移动. 3. 游戏是决定性的,即游戏中不存在随机性. 4. 游戏是完全信息的,

李希的博客 1万+

五子棋智能算法——博弈树编程实现一字棋(四)

一字棋指的是:在一个九宫格内率先连成三个字的取胜 首先,基于前面决策树的讲解 博弈的棋类游戏等等 只要找到合适的估值函数都可以使用博弈树来实现 下面我们来使用博弈树完成一字棋的算法。 根据前面的算法思想我们算法大致分为几步: 1.对棋局落子有正确的估值 2.通过遍历建立博弈树 3.对博弈树进行α-β剪枝增快查找速度(这里由于数据量较小 放在最后一起讲解) 4.根据极大值 极小值搜索...

viafcccy的博客 1万+

AlphaBeta剪枝算法求解博弈树最优选择

博弈树的输入形式为字符串:[A, [B, (E, 3), (F, 12), (G, 8)], [C, (H, 2), (I, 4), (J, 6)], [D, (K, 14), (L, 5), (M, 2)]],其中 [] 里的第一项为结点名称,后面的 [] 或 () 为子结点,而 () 里边则为叶子结点名称及其值。通过 Python 中的 ast.literal_eval 模块可以将该字符串数据解析为数据在 Python 数据类型里本应该存在的形式。

weixin_50917576的博客 1654

python博弈树实现AI五子棋小游戏

python博弈树实现AI五子棋小游戏 运行比较慢,后续优化。 功能有选择先后手和先手禁手规则。 运行效果: #!/usr/bin/env python3 # -*- coding: UTF-8 -*- #wuziqi.py #Author:fengqi from graphics import * import time ### num = [[0 for a in range(16...

hfq0219的博客 3641

基于博弈树的五子棋 AI 算法及其 C++ 实现

基于博弈树的五子棋 AI 算法及其 C++ 实现摘要一   五子棋的游戏规则二   五子棋对弈的算法描述2.1 博弈树搜索算法2.2 α ─ β 剪枝2.3 估价函数 摘要 五子棋是一个风靡全国的棋类游戏,本文研究五子棋的博弈树算法,并编程实现该算法。本文介绍了博弈树的极大极小搜索算法和α-β剪枝优化技术,并提出了自己的估价函数。本文采用C++编程,并用类封装代码,方便外部调用。本文展示了一个人机对弈过程的实例和一个机机对弈过程的实例,实践证明该算

大肥肥熊熊的技术空间 3万+

博弈论-策略式博弈矩阵、扩展式博弈树 习题 [HBU]

本篇博客解决一些博弈论题目,题号已标清。

weixin_63010525的博客 4319

博弈与博弈树

博弈 目标:使参与博弈的一方获胜

Blackoutdragon的博客 4863

博弈树(树的c实现)

下棋属于一种博弈游戏,博弈过程可以用树(博弈树)来表示。假设游戏由两个人( A 和 B )玩,开始由某个人从根结点开始走,两个人轮流走棋,每次只能走一步, 下一步棋只能选择当前结点的孩子结点,谁先走到叶子结点为胜。例如,对于下图所示的博弈树,若 A 先走,可以选 f , B 若选 h ,则 A 选 j 胜。 编写一程序,让计算机和人下棋。当计算机走下一步时,可以根据以下情况决定下一步: (1) 若存在可以确保取胜的一个孩子结点,则选择该结点作为下一步; (2) 若存在多个可以确保取胜的孩子结点,则选择其中高度最小的结点作为下一步(若有多个选择,则选最左边的结点); (3) 若不存在可以确保取胜的一个孩子结点,则选择高度最大的孩子结点作为下一步(若有多个选择,则选最左边的结点); 例: (下面的黑体为输入) (a,(b,(x)),(c,(d),(e,(g),(h)),(f))) a b x c d e g h f Who play first(0: computer; 1: player )? 1 player: c computer: d Sorry, you lost. Continue(y/n)? y Who play first(0: computer; 1: player )? 1 player: x illegal move. player: b computer: x Sorry, you lost. Continue(y/n)? y Who play first(0: computer; 1: player )? 0 computer: c player: f Congratulate, you win. Continue(y/n)? n

基于博弈树分析的五子棋博弈程序

VC源码 可以设定算法和搜索深度,同时将搜索的具体用时和节点数显示出来。

博弈树-BIT

博弈树-BIT 下棋属于一种博弈游戏,博弈过程可以用树(博弈树)来表示。假设游戏由两个人( A 和 B )玩,开始由某个人从根结点开始走,两个人轮流走棋,每次只能走一步, 下一步棋只能选择当前结点的孩子结点,谁先走到叶子结点为胜。例如,对于下图所示的博弈树,若 A 先走,可以选 f , B 若选 h ,则 A 选 j 胜。 编写一程序,让计算机和人下棋。当计算机走下一步时,可以根据以下情况决定下一步: (1) 若存在可以确保取胜的一个孩子结点,则选择该结点作为下一步; (2) 若存在多个可以确保取胜的孩子

One_p_Two_w的博客 4220

基于博弈搜索树的中国象棋程序设计与实现

机器博弈被认为是人工智能领域最具挑战性的研究方向之一。国际象棋的计算机博弈已经有了很长的历史,并且经历了一场波澜壮阔的“搏杀”,“深蓝”计算机的胜利也给人类留下了难以忘怀的记忆。象棋程序的实现可以被分为人工智能和界面程序辅助两大部分。人工智能部分主要体现计算机的下棋思路,既计算机如何进行思考并以最佳走法完成下一步,先由相应的搜索算法进行搜索,并对各种可能的走法进行估值,从中选择胜利面最大的一步;而界面及程序辅助部分主要便于用户通过以前的下棋步骤,更好地调整下棋思路,着法显示使用户能够清楚地知道下棋过程,更准确地把握整个局面。

博弈树搜索算法

0 引言  在智能过程中,搜索是必不可少的,是人工智能中的一个基本问题—— Nilsson。这是因为人工智能研究的主要是那些没有成熟方法可依的问题领域,需要一步步搜索求解。游戏中如何找到对自己有利的局面就属于这类问题。在游戏(人机博弈)程序中博弈树搜索算法是其核心的部分,它与估值及规则(走法)构成一个完整的系统。1 α-β剪枝算法1.1 基本思想  根据倒推值的计算方法,或中取大,与中取小,在扩展和

Notzuonotdied的博客 2万+

博弈树搜索算法研究pdf文件

以五子棋为例,展开如极大极小,alpha-beta剪枝,小窗口搜索等算法的研究

博弈树的启发式搜索

人工智能中博弈树的启发式搜索策略,分为极大极小算法和α-β剪枝技术!

上一篇: 微软2014年笔试题
下一篇: 博弈论 负极大值算法
和道一文字JC
博客等级 码龄19年 24粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值