⼈⼯智能技术导论——博弈树搜索 我在之前整理过⼀篇博客关于博弈论和纳什均衡的⼏个例⼦ 这⾥来介绍博弈树搜索。 ⼀、博弈树的概念 ⼀、博弈树的概念 在博弈过程中, 任何⼀⽅都希望⾃⼰取得胜利。因此,当某⼀⽅当前有多个⾏动⽅案可供选择时, 他总是挑选对⾃⼰最为有利⽽对对⽅最 为不利的那个⾏动⽅案。 此时,如果我们站在A⽅的⽴场上,则可供A⽅选择的若⼲⾏动⽅案之间是"或"关系, 因为主动权操在A⽅⼿⾥,他或 者选择这个⾏动⽅案, 或者选择另⼀个⾏动⽅案, 完全由A⽅⾃⼰决定。当A⽅选取任⼀⽅案⾛了⼀步后,B⽅也有若⼲个可供选择的⾏动⽅案, 此时这些⾏动⽅案对A⽅来说它们之间则是"与"关系,因为这时主动权操在B⽅⼿⾥,这些可供选择的⾏动⽅案中的任何⼀个都可能被B⽅选 中, A⽅必须应付每⼀种情况的发⽣。 这样,如果站在某⼀⽅(如A⽅,即在A要取胜的意义下), 把上述博弈过程⽤图表⽰出来, 则得到的是⼀棵"与或树"。 描述博弈过程的与 或树称为博弈树,它有如下特点: (1) 博弈的初始格局是初始节点。 (2) 在博弈树中, "或"节点和"与"节点是逐层交替出现的。⾃⼰⼀⽅扩展的节点之间是"或"关系, 对⽅扩展的节点之间是"与"关 系。双⽅轮流地扩展节点。 (3) 所有⾃⼰⼀⽅获胜的终局都是本原问题, 相应的节点是可解节点;所有使对⽅获胜的终局都是不可解节点。 ⼆、极⼩极⼤值分析法 ⼆、极⼩极⼤值分析法 在⼆⼈博弈问题中,为了从众多可供选择的⾏动⽅案中选出⼀个对⾃⼰最为有利的⾏动⽅案, 就需要对当前的情况以及将要发⽣的情况进 ⾏分析,从中选出最优的⾛步。最常使⽤的分析⽅法是极⼩极⼤分析法。 其基本思想是: (1) 设博弈的双⽅中⼀⽅为A,另⼀⽅为B。然后为其中的⼀⽅(例如A)寻找⼀个最优⾏动⽅案。 (2) 为了找到当前的最优⾏动⽅案, 需要对各个可能的⽅案所产⽣的后果进⾏⽐较。具体地说, 就是要考虑每⼀⽅案实施后对⽅可能采取 的所有⾏动, 并计算可能的得分。 (3) 为计算得分,需要根据问题的特性信息定义⼀个估价函数, ⽤来估算当前博弈树端节点的得分。此时估算出来的得分称为静态估值。 (4) 当端节点的估值计算出来后, 再推算出⽗节点的得分, 推算的⽅法是:对"或"节点, 选其⼦节点中⼀个最⼤的得分作为⽗节点的得 分,这是为了使⾃⼰在可供选择的⽅案中选⼀个对⾃⼰最有利的⽅案;对"与"节点, 选其⼦节点中⼀个最⼩的得分作为⽗节点的得分,这是为 了⽴⾜于最坏的情况。这样计算出的⽗节点的得分称为倒推值。 (5) 如果⼀个⾏动⽅案能获得较⼤的倒推值, 则它就是当前最好的⾏动⽅案。 倒推值的计算 在博弈问题中,每⼀个格局可供选择的⾏动⽅案都有很多, 因此会⽣成⼗分庞⼤的博弈树。据统计,西洋跳棋完整的博弈树约有1040个节 点。试图利⽤完整的博弈树来进⾏极⼩极⼤分析是困难的。可⾏的办法是只⽣成⼀定深度的博弈树, 然后进⾏极⼩极⼤分析,找出当前最好的 ⾏动⽅案。在此之后, 再在已选定的分⽀上扩展⼀定深度, 再选最好的⾏动⽅案。如此进⾏下去, 直到取得胜败的结果为⽌。⾄于每次⽣成博 弈树的深度, 当然是越⼤越好, 但由于受到计算机存储空间的限制, 只好根据实际情况⽽定。 例 ⼀字棋游戏。设有如图(a)所⽰的九个空格, 由A, B⼆⼈对弈, 轮到谁⾛棋谁就往空格上放⼀只⾃⼰的棋⼦, 谁先使⾃⼰的棋⼦构成"三⼦ 成⼀线"谁就取得了胜利。 ⼀字棋 设A的棋⼦⽤"a"表⽰, B的棋⼦⽤"b"表⽰。为了不致于⽣成太⼤的博弈树,假设每次仅扩展两层。估价函数定义如下: 设棋局为P,估价函数为e(P)。 (1) 若P是A必胜的棋局, 则e(P)=+ 。 (2) 若P是B必胜的棋局, 则e(P)=- 。 (3) 若P是胜负未定的棋局, 则 e(P)=e(+P)-e(-P) 其中e(+P)表⽰棋局P上有可能使a成为三⼦成⼀线的数⽬; e(-P)表⽰棋局P上有可能使b成为三⼦成⼀线的数⽬。 例如, 对于图(b)所⽰的棋局, 则 按照棋盘上红⾊连线安放棋⼦a使得三⼦成⼀线,共6条连线。 按照棋盘上蓝⾊连线安放棋⼦b使得三⼦成⼀线,共4条连线。 e(P)=6-4=2 另外,我们假定具有对称性的两个棋局算作⼀个棋局。还假定A先⾛棋, 我们站在A的⽴场上。 下图给出了A的第⼀着⾛棋⽣成的博弈树。图中节点旁的数字分别表⽰相应节点的静态估值或倒推值。由图可以看出, 对于A来说最好的⼀着 棋是S3,因为S3⽐S1和S2有较⼤的倒推值。 ⼀字棋极⼩极⼤搜索 在A⾛S3这⼀着棋后,B的最优选择是S4, 因为这⼀着棋的静态估值较⼩,对A不利。不管B选择S4或S5,A都要再次运⽤极⼩极⼤分析法产⽣ 深度为2的博弈树,以决定下⼀步应该如何⾛棋, 其过程与上⾯类似, 不再