发现很久都没有更新csdn了,更新一下
阅读了蓝皮和一些网上资料后,形成了自己的一套体系
公平组合游戏
定义 公平组合游戏:
-
两人交替行动
-
某一状态的决策集合只与当前的状态有关,与游戏者无关;
-
同一个状态不可能多次抵达,游戏以玩家无法行动为结束判定失败,且游戏一定会在有限步后以非平局结束。
大部分的棋类游戏都不是公平组合游戏,因为不同玩家只能下不同的棋子。
Nim 是一个公平组合游戏。
将游戏局面状态和玩家决策的状态转移抽象为节点和边可得一幅图:
博弈图和状态
定义 必胜状态 为 先手必胜的状态 , 必败状态 为 先手必败的状态 。简单逻辑推理可得:
- 定理 1:后继状态的状态为空集是必败状态。
- 定理 2:一个状态是必胜状态当且仅当存在至少一个必败状态为它的后继状态。
- 定理 3:一个状态是必败状态当且仅当它的所有后继状态均为必胜状态。
形式化这三个定理:对状态
u
u
u, 其后继状态集合为
V
V
V,有
{
u
必
败
,
V
=
∅
u
必
胜
,
∃
v
∈
V
:
v
必
败
u
必
败
,
∀
v
∈
V
:
v
必
败
\begin{cases}u必败,\,&V=\varnothing\\u必胜,\,&\exists v\in V: v必败\\u必败,\,&\forall v\in V: v必败\end{cases}
⎩⎪⎨⎪⎧u必败,u必胜,u必败,V=∅∃v∈V:v必败∀v∈V:v必败
定理 4:一个状态要么必胜,要么必败。(按逆拓扑序数学归纳)
若用 函数
SG
\operatorname{SG}
SG 和 布尔式 改写,有
{
SG
(
u
)
=
0
,
V
=
∅
SG
(
u
)
≠
0
,
∃
v
∈
V
:
SG
(
v
)
=
0
SG
(
u
)
=
0
,
∀
v
∈
V
:
SG
(
u
)
≠
0
(1)
\begin{cases}\operatorname{SG}(u)=0,\,&V=\varnothing\\\operatorname{SG}(u)\ne0,\,&\exists v\in V: \operatorname{SG}(v)=0\\\operatorname{SG}(u)=0,\,&\forall v\in V: \operatorname{SG}(u)\ne0\end{cases}\tag {1}
⎩⎪⎨⎪⎧SG(u)=0,SG(u)=0,SG(u)=0,V=∅∃v∈V:SG(v)=0∀v∈V:SG(u)=0(1)
为方便描述,重载有向图游戏
G
G
G 的
SG
\operatorname{SG}
SG 值为其起点
s
s
s 的
SG
\operatorname{SG}
SG 值。即
SG
(
G
)
=
SG
(
s
)
\operatorname{SG}(G)=\operatorname{SG}(s)
SG(G)=SG(s)。
(
1
)
(1)
(1)式使
有
向
图
游
戏
G
{
必
败
,
SG
(
G
)
=
0
必
胜
,
SG
(
G
)
≠
0
(2)
有向图游戏 G\begin{cases}必败,\,&\operatorname{SG}(G)=0\\必胜,\,&\operatorname{SG}(G)\ne0\end{cases}\tag 2
有向图游戏G{必败,必胜,SG(G)=0SG(G)=0(2)
为了进一步简化式子,定义
mex
\operatorname{mex}
mex 函数 (minimal excludant) 的值为不属于集合
S
S
S 中的最小非负整数,即:
mex
(
S
)
=
min
{
x
}
(
x
∉
S
,
x
∈
N
)
\operatorname{mex}(S)=\min\{x\} \quad (x \notin S, x \in N)
mex(S)=min{x}(x∈/S,x∈N)
对于状态
x
x
x 和它的所有
k
k
k 个后继状态
y
1
,
y
2
,
…
,
y
k
y_1, y_2, \ldots, y_k
y1,y2,…,yk ,定义满足
(
1
)
(1)
(1)式的
SG
\operatorname{SG}
SG 函数:
SG ( x ) = mex { SG ( y 1 ) , SG ( y 2 ) , … , SG ( y k ) } \operatorname{SG}(x)=\operatorname{mex}\{\operatorname{SG}(y_1), \operatorname{SG}(y_2), \ldots, \operatorname{SG}(y_k)\} SG(x)=mex{SG(y1),SG(y2),…,SG(yk)}
有向图游戏的和
而对于由 n n n 个有向图游戏组成的组合游戏 G G G,设它们的起点分别为 s 1 , s 2 , … , s n s_1, s_2, \ldots, s_n s1,s2,…,sn ,定义该有向图游戏的和为 SG ( G ) = SG ( s 1 ) ⊕ SG ( s 2 ) ⊕ … ⊕ SG ( s n ) \operatorname{SG}(G) = \operatorname{SG}(s_1) \oplus \operatorname{SG}(s_2) \oplus \ldots \oplus \operatorname{SG}(s_n) SG(G)=SG(s1)⊕SG(s2)⊕…⊕SG(sn)。
仍有 SG 定理: 当且仅当 SG ≠ 0 \operatorname{SG}\neq 0 SG=0 ,先手必胜。
证明 只需要证明下面三个定理后使用数学归纳法即可:
- 定理 1:后继状态的状态为空集是必败状态。
- 定理 2:对于 a 1 ⊕ a 2 ⊕ … ⊕ a n ≠ 0 a_1 \oplus a_2 \oplus \ldots \oplus a_n \neq 0 a1⊕a2⊕…⊕an=0 的局面,一定存在某种移动使得 a 1 ⊕ a 2 ⊕ … ⊕ a n = 0 a_1 \oplus a_2 \oplus \ldots \oplus a_n = 0 a1⊕a2⊕…⊕an=0 。
- 定理 3:对于 a 1 ⊕ a 2 ⊕ … ⊕ a n = 0 a_1 \oplus a_2 \oplus \ldots \oplus a_n = 0 a1⊕a2⊕…⊕an=0 的局面,一定不存在某种移动使得 a 1 ⊕ a 2 ⊕ … ⊕ a n = 0 a_1 \oplus a_2 \oplus \ldots \oplus a_n = 0 a1⊕a2⊕…⊕an=0 。
其中 定理 2 是因为状态 x x x 能够达到的状态集合包含 { v ∣ 0 ≤ v < SG ( u ) } \{v\mid0\le v<\operatorname{SG}(u)\} {v∣0≤v<SG(u)}。
有错别怪我