mayaoji的个人博客分享 http://blog.sciencenet.cn/u/mayaoji

博文

博弈树搜索算法——人工智能笔记8

已有 16845 次阅读 2017-4-4 00:34 |个人分类:人工智能|系统分类:科研笔记| 博弈树, 剪枝算法, 极大极小算法

博弈树

分钱币博弈。有一堆钱币,由两位选手轮流进行分堆。要求每个选手每次只能把其中某一堆分成数目不等的两小堆,直到不能再分为止。哪个选手遇到不能再分的情况,就为输。

假设这堆钱币的数量为7。博弈树如下。有maxmin两个选手,节点中的minmax,表示当前节点由响应的选手进行选择。


局面评价函数

在分钱币博弈中,博弈树很短,在对手总是做出最佳选择的假设下,选手可用倒推法来进行决策。

但大多数博弈,博弈树都很深,不可能完全展开。这时需要局面评价函数,对每个节点给出一个分数。

比如一字棋。两个选手轮流在九宫格中落子,棋子先连成一条直线(包括对角线)的选手获胜。局面评价函数可这样定义:max获胜的可能路线数减去min获胜的可能路线数。见下图:


又比如象棋,红棋的个数减去黑棋的个数,就是一个局面评价函数。但这个函数是很不好的,因为不同的棋子价值不一样。所以应给不同的棋子赋予不同的分数。但这还不够,因为棋子位置不同,形势就不同。局面评价函数应把这些因素考虑进去。给出合理的局面评价函数是非常困难的,它直接决定着程序的质量。

围棋程序比象棋程序更难,并不是因为围棋可能的下法更多,从而博弈数的节点更多,更难搜索,而是因为很难给出合理的局面评价函数。

下棋是零和博弈,选手max尽量让博弈进行到分数高的节点,而选手min尽量让博弈进行到分数低的节点。

极大极小法

极大极小法假设对手总是做出最佳的选择。

比如下面这个博弈。轮到max决策。他向前想两个回合,然后根据评价函数给这博弈树中的叶节点赋予分数。


第三层中轮到max选择,他总是选择分数值更大的分支,所以第三层节点的分数值等于他孩子中最大的分数。而第二层节点由min进行决策,他总是选择分数小的分支,所以第二层节点的分数等于他孩子中最小的分数。而第一层的节点由max选择,他选择分数大的分支,和第三层一样。

在对所有节点赋值后,博弈树如下:


在根节点轮到max选择时,max选择第二层最左边的节点,因为它比其他两个节点分数高。

为什么不根据评价函数直接计算第二层节点的分数,而是计算叶节点的分数然后倒推给出其他节点分数值?因为在接近终局时,局面评价函数给出的分数值更准确。

如果是穷举搜索,则局面评价函数只需给出博弈结束时局面的分数就行,无需对所有局面进行打分。因为穷举搜索,叶节点一定是博弈结束的节点。

剪枝算法

剪枝算法的结果和极大极小算法是一样的,它是对极大极小算法的优化。

比如下面这个博弈中,max选择B节点,分值是19,如果选择C节点,而min选择D节点,则分值是17。所以max选择C节点肯定不如选择B节点,根本不用再考虑E节点和F节点,因为maxCmin将选择DEF中分值最小的一个,而这个分值不会超过17。所以将EF剪掉,无需将博弈树在这里展开,也无需计算这些节点的分值。


     同理,在下面这个博弈中,min也无需考虑EF节点,就直接选择B


     在前面讨论的那个博弈,如果使用剪枝算法,得到的博弈树如下图。可看出它比极大极小算法效率提高很多。


剪枝算法的效率依赖于着法的寻找顺序。如果总是先去搜索最坏的着法,那么剪枝就不会发生,最终会找遍整个博弈树,这时该算法就如同极大极小算法一样,效率非常低。



https://blog.sciencenet.cn/blog-1255140-1043468.html

上一篇:电磁定律的相对性——物理笔记4
下一篇:计算机如何下象棋——人工智能笔记9
收藏 IP: 113.67.118.*| 热度|

3 蒋德明 yangb919 aliala

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-28 15:42

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部