极大极小博弈树(转)

 
2008年11月15日 星期六 11:03

       这篇文章将介绍一种对于所有的GameAI(游戏智能)开发来说都非常重要的数据结构。对于几乎每一个棋类博弈游戏程序来说,极大极小树( the minimax tree)都是其中的核心。

极大极小博弈树(Minimax Game Tree,简写为MGT,译者注)用于编写电脑之间的游戏程序,这类程序由两个游戏者轮流,每次执行一个步骤。当然,所有可能的步骤构成了一个树的结构。例如下面的图就是一个MGT,它表示了Tic-Tac-Toe游戏的前两步所有可能的步骤。

(Tic-Tac-Toe是一种简单的九宫格游戏,玩法是使用3*3的9个方格子,每人下一次看谁先连成一行3个,以下称ttt游戏,译者注)

我们注意到这棵树不同于其他的树结构,比如二叉树,2 3树以及堆树(heap tree,译者注),根据游戏规则,一个MGT节点上可能有很多个子节点。

图中的树有三级,不过在编码中,极大极小树的级通常被称作层(级:level,层:ply,译者注)。在每一层中,“转换”开关指向另一个游戏者。两个不同的游戏者通常被称作马克思(MAX,即最大,译者注)和米恩(Min,即最小,译者注)。(下面将简短的解释这些陌生的名称)

对一棵完整的极大极小树来说,计算机能够向前遍历每一步,直到找到最佳步骤为止。当然,正如你在例图中看到的那样,仅仅几个步骤也会令这棵树变得异常庞大,对于一台普通的计算机来说,预测五个步骤就足以令其迅速崩溃。因此,对于像国际象棋和围棋这样的大型博弈游戏来说,计算机程序不可能遍历所有结果,而是仅仅通过最上层的几个步骤来判断胜负。此外,程序员们也提出了很多算法和技巧来减少节点数目,比如阿尔法 贝塔剪枝算法(Alpha-Beta pruning),Negascout搜索算法以及MTD(全称是:Memory enhanced Test Driver,即记忆增强测试驱动,译者注)方法。

MGT当然不能预测所有计算机游戏的可能步骤。比如扑克游戏,计算机在判断对手动向的时候将会非常吃力,因为因为计算机不能看到对方手中的牌。因此,仅仅对于两个游戏者都能看到全部博弈形式的游戏来说,MGT才是最好的选择。这些游戏包括国际跳棋、五子棋、国际象棋和围棋,这些游戏被称作完全信息博弈(原文为games of perfect information,译者注)。

极大极小博弈树是因描绘这种结构的一种简单算法而得名。我们来对ttt游戏的结果分配一下分值。如果叉(X)获胜,则分值为1。如果圈(O)获胜,则分值为-1。现在,叉将试图获得最大化的分值,而圈将试图最小化分值。于是,第一位研究此问题的研究者决定把游戏者叉命名为马克思,并且把游戏者圈命名为米恩。因此,这个完整的数据结构就被命名为极大(Max,马克思,译者注)极小(Min,米恩,译者注)博弈树。

极大极小逻辑也被用于其它博弈,比如国际象棋中。然而,在这些更复杂的博弈中,程序仅仅能搜索极大极小树中的一部分;由于树太过庞大,程序往往不能搜索到博弈最终的结局。计算机一般是搜索某几个节点之后就停止了。然后程序在某个节点上评估博弈的胜负,这些评估结果被换算成博弈形势的分值。如果计算机是马克思一方,程序会试图使博弈形势的分值最大化,同时为获胜结局(将死)赋最大值(比如说这个值是一百万)。如果计算机是米恩一方,显然程序将试图最小化分值,并为获胜结局赋最小分值(例如负一百万)。游戏双方将在两个最大值之间博弈,数值越接近哪一方则哪一方获利(象不象拔河?译者)。

极大极小算法背后的策略假定参与博弈的游戏者都尽自己最大的努力获得好结果。因此,无论对方选择有利或有害的步骤,计算机都将会根据对手的着法选择最于己有利的步骤。

这个简单浅显的概念就是极大极小树的最大奥妙。比如,对马克思的程序来说,无论米恩怎么做,最佳的步骤或步骤序列一定会得到最高分值的结果。而米恩显然将选择那些让它获得最低分值的结果。

从某种意义上说,叶子节点(the bottom nodes,最下层节点,译者注)是唯一需要评估位置分值的节点,因为它们代表最终的结局。比如在马克思的博弈变化中,叶子节点始终处在同一位置。程序将假定米恩将从可能的步骤中选择最低分值的步骤行动,那么任何马克思节点的最大最小值都会等同于米恩节点的最低分值子节点。

最后,像人类的棋类游戏一样,程序的能力高低取决于计算机对所处形势的评估能力,以及程序搜索的深度。一位国际象棋大师对形势的估计误差要大大小于余位业余选手,而且象棋大师对于棋局的预测也远比一般人更远。计算机同样也可以对棋局做出很长远的预测,并且它着棋不会失误,因为它会看到对手由于失误而做出的回应。

有很多算法可以帮助极大极小算法提高搜索效率。其中一种被称作阿尔法 贝塔剪枝算法。在使用这种算法进行的搜索中,计算机所要搜索的节点数大约只是不使用这种技术所需搜索节点数的平方根那么多。也就是说,如果程序原来需要搜索四百个节点,使用新的算法后它只需要搜索二十个。

其它的一些工具包括置换表(原文为Transposition table,译者注),记载搜索结果的纪录被放在一张可以快速存取的很小的表中。通常来说,不同的步骤序列可能达到相同的位置(结果)。这两个位置(结果)就可以互换。该表可以帮助计算机认识目前棋局的形势,因为它已经付出了内存存取时间的代价对其进行了审查。

同时,这些技术也允许计算机搜索更多的节点,并模拟策略思考。尽管其它的技术也开始崭露头角(比如神经网络),但极大极小树仍然是该类程序的最佳心脏。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 基于Minimax tree的跳棋博弈系统C语言实现源码+详细项目说明+作业报告.zip 跳棋是一种由两名玩家玩的策略棋盘游戏。跳棋有很多变体。本系统的任务是实现一个智能决策的人机跳棋对战系统。 跳棋具有多种多样的游戏规则。本系统的跳棋规则叙述如下: (1)**设定**。一个 8x8 棋盘,有 12 个黑子和 12 个白子,初始位置如图 1a 所示。 (2)**游戏玩法**。每位棋手所下的棋子都是同一颜色的。黑方先走一步,然后白方走一步,然后双方轮流下棋。在一个回合中,棋手要么选择移动棋子,要么选择吃子。例如,图1a中的箭头表示黑棋从G6单元向F5单元移动。 (3)**移动**。棋子可以斜向前移动到一个空单元格(朝向对手,黑棋为北,白棋为南)一格。图 1b 中的箭头显示了黑白棋子的所有合法走法。 (4)**塔**。当一个棋子到达最远的一排(黑棋为最上一排,白棋为最下一排),它就成为一座塔。图1b中D7单元的白棋唯一的一步棋就把它提升到了塔中。A塔可以在对角线上向前或向后移动一个空格子。图1c中的箭头显示了黑、白塔的所有合法棋步。塔和普通棋子的区别在于,**塔可以向4个方向任意移动**。 (5)**吃子**。为了吃掉对方的棋子或塔,棋手的棋子或塔要跳过它并落在在另一边的直线对角线上。这个落子格必须是空的。当一个棋子或塔被吃掉后它就会从棋盘上移走。在一次跳跃中只能吃掉一个棋子或塔,而在我们的变体游戏中,只允许跳跃一次。在我们的游戏中,一个回合中只允许跳一次。因此,如果在第一次跳棋之后还有另一个棋子可以捕获,那么就不能选择在这一回合中吃子。此外,在游戏中,如果一个棋手可以选择出棋或吃子,他们可以任意决定完成哪个行为。棋子总是向前跳(朝向对手),而塔可以向前和向后移动。图1d中的箭头显示了双方棋手的所有合法吃子。 (6)**游戏结束**。如果轮到对手并且他们无法采取行动(移动棋子或吃子),则当前的玩家赢得游戏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值