计算机博弈的基本原理
弈棋过程分析
为了深入探讨计算机博弈的原理与方法学问题,有必要分析二人(设为甲方——先手、 乙方——后手)对弈的演化过程,建立相应的数学模型。图 2-1 给出了博弈状态演化过程图 [5]。图中表明棋局状态是在着法算子作用下进行演化的,其对应的状态转移方程可以写成
式中 S0为棋局的初始局面,qn+1为第 n+1 步的着法算子,而 Sn+1 为下完第 n+1 步后的棋局。 于是,不难写出
弈棋的过程是双方轮流给出着法,使棋局向着本方有利的方向发展,直至最后的胜利。 弈棋的核心是如何给出着法,这涉及一个复杂的思维过程。简单说来就是:用着法推演局面, 从有利的局面中选择当前的着法。显然准确地评估推演出来的局面是选手棋力的重要体现。
如何让计算机下棋
为了让计算机能够下棋,首要的任务就是通过恰当的数据结构使棋类要素数字化,这里 包括:棋盘、棋子、棋规(着法规则,胜负规则)等。
为了用着法推演局面和展开博弈树,就需要具有着法生成器,用以生成该局面下全部(或 部分感兴趣)的着法。图 2-2 给出了博弈者思维过程的机器实现过程框图。从而可以产生如图 2-3 所示的博弈树(Game Tree)。节点为局面,树枝为着法,根节点为当前局面,叶节点 为展开相应深度的终点局面。双方轮流出手,偶数层为本方(方块表示),奇数层为对方(圆 圈表示)。如果叶节点还不是能够给出胜-负-和的最终局面,则要对叶节点进行评估 (Evaluation)。以便从有利局面选择当前着法。这便是博弈搜索的职能。 搜索引擎根据极大-极小的搜索算法,找到对于本方而言最好的结局。然后找到最佳路 径(Principal Variation – 主要变例),从而找到相应的根着法(Root Move),即是本轮搜索 所要给出的当前着法[5]。不难看出,评估和搜索将成为博弈软件的重要部分。
棋局评估
如果在叶子节点不能给出胜-负-和的结果,那“有利局面”的选择就只能依靠局面的评 估了。通常设计的评估函数需要考虑如下不同类型的知识,并通过量化后加权组合而成。
子力(Material)
在象棋和国际象棋中,它是所有子力价值的和;在围棋或黑白棋中,通常计算双方棋盘 上棋子的数量。但是黑白棋有个有趣的反例:棋局只由最后的子数决定,而在中局根据子力 来评价却是很差的思路,因为好的局势下子数通常很少。其他像五子棋一样的游戏,子力是 没有作用的,因为局面好坏仅仅取决于棋子在棋盘上的相互位置,看它是否能够发挥作用。
位置(Position)
棋子落于不同的棋位其作用可能差别很大。象棋中的车占中路,兵过河,马卧槽都是具 有威胁性的位置。相反如果马窝心,兵下底又都不甚理想。围棋中的星位也是兵家必争之地。 于是不同的位置给予不同的分值,以表示不同的价值。
空间(Space)
在某些棋类中,棋盘可以分为本方控制的区域和对方控制的区域,以及有争议的区域。 在围棋中,这个思想被充分体现。而包括象棋在内的一些棋类也具有这种概念,本方的区域 包括一些棋位,它被本方的棋子攻击或保护,而不被对方棋子攻击或保护。在黑白棋中,如 果一块相连的棋子占据一个角,那么这些棋子就吃不掉了,成为该方的领地。空间的评价就 是简单地把这些区域加起来,如果所含棋位的重要程度存在差别,那就在区域的计算上增加 棋位重要性的因素。 2.4.4 机动(Mobility) 各个棋子的机动性如何,关系到棋子可行着法 的多少。如象棋中的马是可以“马踏八方”的,但 是贴边或被憋腿,其活动余地大减。显然机动性越 好,可行着法越多,选择有利局势的机会也越多。
拍节(Tempo)
某些情况下起决定作用的不是着法的多少,而 是出招的拍节和数量的奇偶性等。以一数学游戏为 例:有两堆石子,双方轮流从石堆中拿去几颗,每 次只能从一堆石子中拿走至少一颗石子,拿完最后 一堆者获胜。这个游戏的诀窍是:始终让对方面临 两堆石子一样多的窘境。面向这样的问题时,先手 方只要头一步让两堆石子数目一样多就可以了。然 图 2-6 一个受制于节拍的象棋棋局 计算机博弈教程 计算机博弈原理与方法学概述 - 15 - 后对手从某一堆取走几颗,先手方便在另一堆取走同样数量的石子。在黑白棋和象棋中都会 遇到这样的问题。而对于一字棋和点格棋这招则是制胜的法宝。 图 2-6 给出了一个中国象棋的排局,也包括类似奇偶性的主动权问题。在这个局面中, 双方的兵(卒)都不能离开原位,否则对方平帅(将)即可造成铁门栓杀。双方的中炮不能离开 中线,而三七路炮也不能离开该线,否则对方就会有闷宫杀。这样的棋型只能有一种取胜方 法——用自己的两个炮顶住对方的两个炮,迫使对方让开兵(卒)或三七路炮。此时红方取胜 的关键一步就是炮七进四,使双方的两个炮间等距。以后的着法则是始终保持等距。
威胁(Threat)
威胁的思想是“步步紧逼”,或要取胜,或要吃子,使对方仅有招架之功,而无还手之 力。在五子棋、六子棋中常常采用基于威胁的搜索。以五子棋为例,可通过不断地摆出“活 3”、“冲 4”的棋型的方法,将对方逼到防无可防的境地,从而取胜。
形状(Shape)
形状的好坏对于局面的影响一般是长远的,在浅层的搜索中不易发现。在象棋中,对手 的空头跑,单车栓车马,就都是不好的形状,最终使本方处于被动的局面。形状对于连珠棋 一类通过“摆成形状”而决定胜负的就更是评估的焦点。
图案(Motif)
一些常见的具有鲜明特点的图案,蕴涵着特殊的意义。许多图案在围棋中称之为模式, 如 3×3 上下文模式,通过对大量高手对局中的模式提取和出现频率的统计,构造模式库, 便可以由此提供下一手落子的最佳位置。
棋局性能评估
从表面上看,棋局评估的越全面、越准确,棋力性能就会越高。其实不然。一般说来, 棋力性能 = 知识×速度,时间作为约束条件。评估中考虑的问题越多、越细致,耗费的时 间则越多,必然影响到单位时间内搜索节点的数目,影响到搜索的速度和深度。 在博弈软件的设计中通常存在“重知识”(评估)和“重速度”(搜索深度)两种倾向, 并且都有成功的范例。当然能够权衡利弊,将两者有机结合则是最为理想的方案。这也是目前共同努力的方向。
结语
计算机博弈原理与方法学既涉及到博弈论(对策论)、搜索原理等理论内容,又更多地涉及到数据结构、软件工程、程序设计方法学等方面的知识。计算机博弈属于计算机科学与 应用学科的研究方向之一,又是人工智能领域的重要研究方向,应该属于智能科学与技术学科的一个分支。虽然这一方向的研究工作取得了举世瞩目的成果,但是相关的理论与应用技 术的归纳与提升还有很多工作要做。这也是把计算机博弈技术应用到其它领域所不可或缺的基础性工作。