• 博弈问题的基本假设
Ø 两个棋手交替地走棋
Ø 比赛的最终结果,是赢、输和平局中的一种
Ø 可用图搜索技术进行,但效率很低
Ø 博弈的过程,是寻找置对手于必败态的过程
Ø 双方都无法干预对方的选择
极大极小搜索
• 基本思想
Ø 下棋的双方是对立的
Ø 一方为“正方”,这类节点称为“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)=6−4=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β剪支。
本文介绍了博弈问题的基本假设及极小极大搜索法的基本思想,包括如何通过评估函数预测棋局走向,以及如何利用α-β剪枝提高搜索效率。
635

被折叠的 条评论
为什么被折叠?



