logo资料库

极大极小博弈树-一种数据结构.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
极大极小博弈树 这篇文章将介绍一种对于所有的 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,译者注),记载搜索结果 的纪录被放在一张可以快速存取的很小的表中。通常来说,不同的步骤序列可能达到 相同的位置(结果)。这两个位置(结果)就可以互换。该表可以帮助计算机认识目 前棋局的形势,因为它已经付出了内存存取时间的代价对其进行了审查。 同时,这些技术也允许计算机搜索更多的节点,并模拟策略思考。尽管其它的技术也 开始崭露头角(比如神经网络),但极大极小树仍然是该类程序的最佳心脏。
分享到:
收藏