人工智能笔记04 博弈搜索——基于《人工智能》 朱福喜,清华大学出版社,2016

本文介绍了博弈问题的基本假设及极小极大搜索法的基本思想,包括如何通过评估函数预测棋局走向,以及如何利用α-β剪枝提高搜索效率。

• 博弈问题的基本假设
Ø 两个棋手交替地走棋
Ø 比赛的最终结果,是赢、输和平局中的一种
Ø 可用图搜索技术进行,但效率很低
Ø 博弈的过程,是寻找置对手于必败态的过程
Ø 双方都无法干预对方的选择

极大极小搜索

• 基本思想
Ø 下棋的双方是对立的
Ø 一方为“正方”,这类节点称为“MAX”节点
Ø 另一方为“反方”,这类节点称为“MIN”节点
Ø 正方从所有子节点中,选取具有最大评估值的节点
Ø 反方从其所有子节点中,选取具有最小评估值的节点
Ø 反复进行这种选取,就可以得到双方各个节点的评估值。这种确定棋步
的方法,称为极小极大搜索法

• 对各个局面进行评估
Ø 评估的目的:对后面的状态提前进行考虑,并且以各种状态的评估值为
基础作出最好的走棋选择。
Ø 评估的方法:用评价函数对棋局进行评估。赢的评估值设为+∞,输的评
估值设为-∞,平局的评估值设为0。
Ø 评估的标准:由于下棋的双方是对立的,只能选择其中一方为评估的标
准方。
(评判方一般选择正方

1. T:=(s, max), Open:=(s), Closed:=();
2. Lopp1: // 扩展深度至d
3. If Open=( ) Then Goto Loop2
4. n:=First(Open), Remove(n,Open), Add(n,Closed)
5. If F(n)=-∞, +∞, 0, Then Goto Loop1 // 可以被判定
		Else {ni}:=Expand(n) , Add({ni},T)
		If d(ni)<k Then Add(ni,Open), Goto Loop1
		Else !"f(ni), Goto Loop1
		
6. Loop2: // 赋值
7. If Close=() Then Goto Loop3 
		Else np:=First(Closed)
		
8. If (np Is Max) And (F(npi)#$) // npi是np的子结点,且都有值
		Then f(np):=max f(npi), Remove(np,Closed)
		If (np Is MIN) And (f(npi)#$) // npi是np的子结点,且都有值
		Then f(np):=min f(npi), Remove(np,Closed) 
		If np %&'$, Then MoveTail(np, Closed)
		
9. Goto Loop2
10. Loop3:
11. If f(s)#$ Then Exit(End or M(Move, T)) // s被赋值,结束该步

举个例子:
一字棋
• 在九宫格棋盘上,两位选手轮流在棋盘上摆各自的棋子(每次一
枚),谁先取得三线的结果就取胜。
Ø 设程序方MAX的棋子用(×)表示, MAX先走。
Ø 对手MIN的棋子用(o)表示。
Ø 例如:

|O|O|O|
| |X| |
|X| |X|

(N表示没有)
• 估计函数
Ø f§=(所有空格都放上MAX的棋子之后,MAX三子成线数)-(所有空格都
放上MIN的棋子之后,MIN三子成线数);
Ø 若P是MAX获胜的格局,则f§=+∞ ;
Ø 若P是MIN获胜的格局,则f§=-∞ 。
例如这个局面

| |O| |
| |X| |
| | | |
摆满X
|X|O|X|
|X|X|X|
|X|X|X|
摆满O
|O|O|O|
|O|X|O|
|O|O|O|

f(p)=6−4=2f(p)=6-4=2f(p)=64=2

α−β\alpha-\betaαβ剪枝

• a-b剪支法的引入
Ø 极小极大法中,必须求出所有终端节点的评估值,当预先考虑的棋步比
较多时,计算量会大大增加。为了提高搜索的效率,引入了通过对评估
值的上下限进行估计、从而减少需进行评估的节点范围的a-b剪支法

• MAX节点的评估下限值α\alphaα
Ø 作为正方出现的MAX节点,假设它的MIN子节点有N个,那么当它的第
一个MIN子节点的评估值为α\alphaα时,则对于其它的子节点,如果有高过α\alphaα
,就取那最高的值作为该MAX节点的评估值;如果没有,则该MAX节
点的评估值为α\alphaα。总之,该MAX节点的评估值不会低于α\alphaα,这个α\alphaα就称为
该MAX节点的评估下限值。

• MIN节点的评估上限值β\betaβ
Ø 作为反方出现的MIN节点,假设它的MAX子节点有N个,那么当它的第
一个MAX子节点的评估值为β\betaβ时,则对于其它子节点,如果有低于β\betaβ
,就取那个低于β\betaβ的值作为该MIN节点的评估值;如果没有,则该MIN
节点的评估值取β\betaβ。总之,该MIN节点的评估值不会高过β\betaβ,这个β\betaβ就称
为该MIN节点的评估上限值

• 极大节点的下界为α\alphaα
• 极小节点的上界为β\betaβ
• 剪枝的条件:
Ø 后辈节点的β\betaβ值≤祖先节点的α\alphaα值时,α\alphaα剪枝
Ø 后辈节点的α\alphaα值≥祖先节点的β\betaβ值时, β\betaβ剪枝
• 简记为:
Ø 极小≤极大,剪枝
Ø 极大≥极小,剪枝

α\alphaα剪支法
Ø 设MAX节点的下限为α\alphaα,则其所有的MIN子节点中,其评估值的β\betaβ上限
小于等于α\alphaα的节点,其以下部分的搜索都可以停止了,即对这部分节点
进行了α\alphaα剪支

b剪支法
Ø 设MIN节点的上限为β\betaβ,则其所有的MAX子节点中,其评估值的α\alphaα下限
大于等于β\betaβ的节点,其以下部分的搜索都可以停止了,即对这部分节点
进行了β\betaβ剪支。

本质上是得利用前序遍历来进行剪枝

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值