博弈论
博弈论
一、博弈树
在组合游戏论中,博弈树是每个节点都表示一个游戏状态的有向图,图中的有向边是游戏中的某一步。
一颗完整的博弈树,包含了从雏实游戏状态开始以及所有可达状态的所有可能的移动。
终止状态
博弈树中的叶子结点是指没有后继状态的结点(表示游戏结束时的游戏状态)。
在叶子结点对应的状态中,由于双方都不能走,所以也被称为终止状态。
MAX状态
假设当前状态轮到一方走,有多个可以选择的后继状态,那么一定选择游戏值最大的后继状态。
对应的游戏值也是当前状态的游戏值。
这样的状态称为MAX状态。
MIN状态
假设当前状态轮到对方走,有多个可以选择的后继状态,那么一定选择游戏值最小的后继状态。
对应的游戏值也是当前状态的游戏值。
这样的状态称为MIN状态。
Alpha-Beta 剪枝
Alpha-Beta剪枝是指在一个Max状态时,它的后继状态一定是一个Min状态(显然),
而如果当前这个Max状态的最大游戏值是X,
而它的某个Min子状态种有一个子状态的值小于等于X,
那么这个Min子状态一定不能更新Max状态。
观察上图中的博弈树,如果先遍历了初始状态的右子树,可以知道根结点的游戏值至少为5.
而后,遍历左子树时,到\(-1\)结点,发现游戏值为\(-1\),且是根节点的Min子状态的子状态。
由于\(-1 \leq 5\),
所以此时不需要再遍历该Min状态的其他子状态了。
类似地,
在Min状态也可以进行Alpha-Beta剪枝。
Max状态的子状态一定是Min状态
Min状态的子状态一定是Max状态
二、有向图博弈问题
1.公平组合游戏
若一个游戏满足:
- 两名玩家交替行动。
- 在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关。
- 不能行动的玩家判负。
则称该游戏为一个公平组合游戏。
NIM博弈属于公平组合游戏,但常见的棋类游戏,比如围棋,就不是公平组合游戏。
因为围棋的交战双方分别只能落黑子和白子。(不满足条件\(2\))
胜负判定也比较复杂。(不满足条件\(3\))
2.有向图游戏
在公平组合游戏中,可以把所有有可能出现的状态看作是图的结点,
如果从一个状态可以通过一步转移到达另一个状态,则在两点之间连一条有向边,
这样就得到了一个状态图。
以巴什博弈为例,
一共有\(n\)个物品,两个人轮流取,
一次最少取走\(1\)个最多取走\(m\)个,
最后取光的人获胜。
如图展示了\(n=6,m=3\)的时候的状态图,
结点内的数字表示当前状态剩下的物品的个数。
假设游戏不会出现平局,即状态图是有向无环图,
所有的状态可以分成两种,
\(P\)态和\(N\)态。
\(P\)态表示该状态对于前一个玩家来说是必胜的,
而\(N\)态表示该状态对于下一个玩家来说是必胜的。
例如,对于\(n=6,m=3\)的巴什博弈来说,
0个物品显然是\(P\)态,
而还剩\(1、2\)或\(3\)个物品的状态都是\(N\)态。
如果当前状态下,游戏不能再继续进行,则该状态被成为终止状态。
例如,巴什博弈中物品已经被取光了。
在大部分的游戏规则中,终止状态都是\(P\)态。
3.Mex运算
设\(S\)表示一个非负整数集合。
定义\(mex(S)\)为求出不属于集合\(S\)的最小非负整数的运算,即:
\(mex(S)=min\) { $x|x\in N,x\in !!!!!/ S $ }
4.SG函数
对于任意状态\(x\),
它的SG函数值为:\(g(x)=mex\) { \(g(y)|y\)是\(x\)的后续状态 }。
对于一个终止状态,因为它没有后继状态,所以它的SG函数值为\(0\)。
还以\(n=6,m=3\)的巴什博弈为例,
用\(S_i\)表示还剩\(i\)个物品的状态。
\(S_0\)是终止状态,
所以\(g(S_0)=0\)。
\(S_1\)唯一的后继状态是\(S_0\),所以\(g(S_1)=1\)。
\(S_2\)可以转移到\(S_1\)和\(S_0\),
所以\(g(S_2)=2\)。
因为\(S_3\)可以转移到\(S_2、S_1\)和\(S_0\),
所以\(g(S_3)=3\)。
对于\(S_4\)来说,它可以转移到\(S_3、S_2\)和\(S_1\),
三者的SG值分别为3、2、1,
因此\(g(S_4)=0\)。
依此类推可以知道\(g(s_5)=1\),\(g(s_6)=2\)。
如果知道一个状态的SG函数值,
可以快速地判断该状态是\(P\)态还是\(N\)态。
对于一个状态,如果这个状态的SG值等于\(0\),
那么这个状态是\(P\)态,
否则就是\(N\)态。
仍然以\(n=6,m=3\)的巴什博弈为例,
\(g(S_4)=0\),
所以\(S_4\)是一个\(P\)态,即先手必败。
而\(S_5\)和\(S_6\)的SG值都不为\(0\),
它们都是\(N\)态,即先手必胜。
事实上,对于\(S_5\)和\(S_6\)来说,
先手想要必胜,需要把物品取到只剩下\(4\)个。
(显而易见)
5.Nim游戏
Nim游戏是一个公平组合游戏:
游戏开始时有\(n\)堆石子,第\(i\)堆有\(a_i\)个石子,
两个玩家轮流挑选一堆石子,
并从中取走若干个,
最后不能再取的人输。
加入只有一堆石子,那么显然是先手获胜,
因为他只需要把这堆石子取光即可。
如果有两堆或者更多堆,
游戏的最佳策略似乎并不是那么显而易见。
我们想到计算状态的SG函数。
但是由于后继状态过多,算法效率较低。
其实,Nim游戏有一个很优美的算法,
对于当前状态\(a=(a_1,a_2…a_n)\),如果\(a_1\) ^ \(a_2\) ^ \(a_n=0\),则为\(P\)态,否则为\(N\)态。
显然,通过这种结论。
我们可以很轻易的把Nim游戏转化成为通过SG函数来求解。