博弈论
博弈树
-
基本概念
-
组合游戏论主要研究信息完全的双人轮流博弈的游戏。
-
在组合游戏论中,博弈树是一个节点都表示一个游戏状态的有向图
-
图中的有向边都是游戏中的某一步。
-
一个完整的博弈树,包含了从初始游戏状态开始以及所有可达状态的所有可能的移动。
-
博弈树中的叶子节点是指没有后继状态的节点。
- 在叶子节点对应的状态中,由于双方都不能走,所以也被称为终止状态。
- 每个状态,即博弈树上的节点,都对应了一个游戏值,该游戏值为游戏双方从该局面出发以最优策略博弈后,己方所能获得的分数。
- 假设当前状态轮到己方走,有多个可以选择的后继状态,那么一定选择游戏值最大的后继状态。称为 Max 状态。
- 假设当前状态轮到对方走,有多个可以选择的后继状态,那么一定选择游戏值最小的后继状态。称为 Min 状态。
-
-
Alpha-Beta 剪枝
- 在一个 Max 状态时,它的后继状态一定是一个 Min 状态,而如果当前这个 Max 状态的最大游戏值是X,而它的某个 Min 子状态中有一个子状态的值小于等于X,那么这个 Min 子状态一定不能更新 Max 状态。
-
-
性质
- Max 状态的子状态一定是 Min 状态。
- Min 状态的子状态一定是 Max状态。
SG函数
-
基本概念
- 在公平的组合游戏中,可以把所有有可能出现的状态看作是图的节点
- 如果从一个状态可以通过一步转移到达另一个状态,则在两点之间连一条有向边,这样就得到了一个状态图。
- 假设游戏不会出现平局,即状态图是有向无环图的话,所有的状态可以分成两种,P 态和N态。
- P 态表示该状态对于前一个玩家来说是必胜的
- N 态表示该状态对于下一个玩家来说是必胜的
- 一个状态被称为终止状态,如果当前状态下游戏不能再继续进行。
- 在大部分的游戏规则中,终止状态都是P态。
- 如果不加特殊说明,以下都假设终止状态为P态。
- 任意一个 P态
- 要么是一个终止状态
- 要么它所有可以转移到的状态(后继状态)都是N态
- 任意一个 N 态
- 至少有一个后继状态是P态。
- 在公平的组合游戏中,可以把所有有可能出现的状态看作是图的节点
-
SG 函数
-
对于任意状态 x x x,它的SG函数值 g ( x ) = m e x { g ( y ) ∣ y 是 x 的后续状态 } g(x)=mex\{g(y)|y是x的后续状态\} g(x)=mex{g(y)∣y是x的后续状态},其中 m e x mex mex 是一个对于非负整数集合S的运算, m e x ( S ) mex(S) mex(S)为 S S S 中没有出现的最小非负整数。
- 对于一个终止状态,因为它没有后继状态,所以它的SG函数值为0。
-
例子:巴什博弈,一共有 6 6 6 个物品,两个人轮流取,一次最少取走 1 1 1 个最多取走 3 3 3 个,最后取光的人获胜。
-
S
i
S_i
Si表示还剩
i
i
i 个物品的状态。
- S 0 S_0 S0 是终止状态,所以 g ( S 0 ) = 0 g(S_0)=0 g(S0)=0
- S 1 S_1 S1 唯一的后继状态是 S 0 S_0 S0,所以 g ( S 1 ) = 1 g(S_1)=1 g(S1)=1。
- S 2 S_2 S2 可以转移到 S 0 S_0 S0和 S 1 S_1 S1,所以 g ( S 2 ) = 2 g(S_2)=2 g(S2)=2。
- S 3 S_3 S3 可以转移到 S 0 S_0 S0和 S 1 S_1 S1和 S 2 S_2 S2,所以 g ( S 3 ) = 3 g(S_3)=3 g(S3)=3。
- 对于 S 4 S_4 S4 来说,它可以转移到 S 1 S_1 S1和 S 2 S_2 S2和 S 3 S_3 S3,三者的SG值分别为3、2、1,因此 g ( S 4 ) = 0 g(S_4)=0 g(S4)=0。
- 依次类推可以知道 g ( S 5 ) = 1 , g ( S 6 ) = 2 g(S_5)=1,g(S_6)=2 g(S5)=1,g(S6)=2。
-
S
i
S_i
Si表示还剩
i
i
i 个物品的状态。
-
对于一个状态,如果这个状态的SG值等于 0,那么这个状态是P态,否则就是N态。
-
Nim游戏和Nim和
- Nim游戏
- 游戏介绍:
- Nim 游戏是一个公平的组合游戏。
- 游戏开始时有 n n n 堆石子,两个玩家轮流挑选一堆石子,并从中取走若干个,最后不能再取的就是输家。
- SG函数计算
- 用一个 n n n 维向量 a = ( a 1 , a 2 , … , a n ) a=(a_1,a_2,…,a_n) a=(a1,a2,…,an) 表示任意一个游戏局面,其中 a i a_i ai 表示的是第 i i i 堆石子当前还剩多少个。
- 对于当前状态
a
=
(
a
1
,
a
2
,
…
,
a
n
)
a=(a_1,a_2,…,a_n)
a=(a1,a2,…,an)
- 如果 a 1 ⊕ a 2 ⊕ … ⊕ a n = 0 a_1\oplus a_2\oplus …\oplus a_n=0 a1⊕a2⊕…⊕an=0,则为 P 态,否则为 N 态
- 其中 $\oplus $ 运算符表示的是按位异或操作
- 正确性证明
- 如果 a 1 ⊕ a 2 ⊕ … ⊕ a n = 0 a_1\oplus a_2\oplus …\oplus a_n=0 a1⊕a2⊕…⊕an=0,则要么这是一个终止状态,要么该状态的所有后继状态等式都不成立。
- 如果 a 1 ⊕ a 2 ⊕ … ⊕ a n ≠ 0 a_1\oplus a_2\oplus …\oplus a_n\ne0 a1⊕a2⊕…⊕an=0,则该状态一定可以转移到某个能让等号成立的后继状态。
- 游戏介绍:
- Nim和
- 称一个游戏 G G G 是一组游戏 G 1 , G 2 , … , G n G_1,G_2,…,G_n G1,G2,…,Gn 的和,如果 G G G 的每一步可以抽象成:先挑选一个子游戏 G i G_i Gi,然后在 G i G_i Gi中走一步。
- 如果函数 g i g_i gi是 G i G_i Gi 的SG函数,则游戏 G G G 的SG函数 g = g 1 ⊕ g 2 ⊕ … ⊕ g n g=g_1\oplus g_2\oplus …\oplus g_n g=g1⊕g2⊕…⊕gn,即对G的任意状态 a = ( a 1 , a 2 , … , a n ) a=(a_1,a_2,…,a_n) a=(a1,a2,…,an), g ( a ) = g 1 ( a 1 ) ⊕ g 2 ( a 2 ) ⊕ … ⊕ g n ( a n ) g(a)=g_1(a_1)\oplus g_2(a_2)\oplus …\oplus g_n(a_n) g(a)=g1(a1)⊕g2(a2)⊕…⊕gn(an)。