Everything that kills me makes me feel alive.

蒟蒻的博弈论学习

参考文献: OI Wiki & 转载后的合集 & 再谈SG函数和SG定理

博弈论,是经济学的一个分支,主要研究具有竞争或对抗性质的对象,在一定规则下产生的各种行为。博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。通俗地讲,博弈论主要研究的是:在一个游戏中,进行游戏的多位玩家的策略。

博弈论分类

  • 公平组合游戏(Impartial Game):

    • 游戏有两个人参与,二者轮流做出决策,双方均知道游戏的完整信息;

    • 任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关;

    • 游戏中的同一个状态不可能多次抵达,游戏以玩家无法行动为结束,且游戏一定会在有限步后以非平局结束。

  • 非公平组合游戏(Partizan Game):

    • 非公平组合游戏与公平组合游戏的区别在于在非公平组合游戏中,游戏者在某一确定状态可以做出的决策集合与游戏者有关。大部分的棋类游戏都 不是 公平组合游戏,如国际象棋、中国象棋、围棋、五子棋等(因为双方都不能使用对方的棋子)。
  • 反常游戏(Misère Game):

    • 反常游戏按照传统的游戏规则进行游戏,但是其胜者为第一个无法行动的玩家。以 Nim 游戏为例,Nim 游戏中取走最后一颗石子的为胜者,而反常 Nim 游戏中取走最后一刻石子的为败者。

1.公平组合游戏(Impartial Game)

经典的公平组合游戏有很多,包括取数游戏,31 点,以及 Nim 游戏等。

Nim游戏

\(n\) 堆物品,每堆有 \(a_i\) 个,两个玩家轮流取走任意一堆的任意个物品,但不能不取。取走最后一个物品的人为获胜者。

博弈图和状态

博弈图:
如果将每个状态视为一个节点,再从每个状态向它的后继状态连边,我们就可以得到一个博弈状态图。节点 \((i,j,k)\) 表示局面为 \(i,j,k\) 时的状态
状态:
我们定义在当前情况下先手的状态分为必胜状态(N-position)必输状态(P-position)

三个定理
  • 1.无后继状态的状态为必输状态(游戏无法进行,已经被取完)

  • 2.必胜状态后继状态至少有一个为必输状态(通过操作使对方到达必输状态)

  • 3.必输状态后继状态全部为必胜状态(无论如何操作,对方都会到达必胜状态)

N-position 和 P-position 的定义
  • 1.无法进行任何移动的局面(也就是 \(terminal position\))是 \(P-position\)

  • 2.可以移动到 \(P-position\) 的局面是 \(N-position\) ;

  • 3.所有移动都导致 \(N-position\) 的局面是 \(P-position\)

Nim和

通过构建博弈图,我们可以在 \(O(\prod_{i=1}^{n} a_i)\) 时间里判断先手输赢

定义 \(Nim和=a_1\oplus a_2\oplus a_3 \oplus a_4 \oplus \dots \oplus a_n\)

当Nim和等于0时,为必败状态,否则为必胜状态。

Nim和性质证明

再次引入刚刚的三个定理:

  • 1.没有后继状态的状态(异或和为0)是必败状态
  • 2.对于\(a_1\oplus a_2\oplus a_3 \oplus \dots \oplus a_n\ne0\),那么一定可以通过某种方式转为\(a_1\oplus a_2\oplus a_3 \oplus \dots \oplus a_n==0\)
  • 3.对于\(a_1\oplus a_2\oplus a_3 \oplus \dots \oplus a_n==0\),那么它的后继状态一定全为\(a_1\oplus a_2\oplus a_3 \oplus \dots \oplus a_n\ne0\)

对于定理 \(1\) ,当 \(a\) 值全为 \(0\) 时,异或值即为 \(0\)

对于定理 \(2\) ,设 \(Nim\) 值为 \(k\) ,将一个 \(a\) 值转为 \(a \oplus k\) 值,由于异或为奇 \(1\)\(0\) ,所以一定有奇数个 \(a\) 值在 \(k\) 二进制下最高位为一,满足这个条件的 \(a_i\)\(k\) 异或后必定变小,即 \(a_i> a_i \oplus k\) ,满足石子。

对于定理 \(3\) ,根据异或运算律的 \(a_i=a_i^\prime\)

有向图(DAG) 与 SG 函数

大部分的公平组合游戏都可以转化为 \(DAG\) 游戏

在一个有向无环图中,只有一个起点,上面有一个棋子,两个玩家轮流沿着有向边推动棋子,不能走的玩家判负。

定义 \(mes(S)\) 函数的值为不属于集合 \(S\) 的最小非负整数,即:

\[mes(S)=min\begin{Bmatrix}x\end{Bmatrix} \]

SG函数定义

对于状态 \(x\) 和它 \(k\) 个后继状态 \(y_1,y_2,y_3 \dots y_n\) ,我们定义 \(SG\) 函数:

\(SG(x)=mex(SG(y_1),SG(y_2),\dots ,SG(y_4))\)

而对于由 \(n\) 个有向图游戏组成的组合游戏,设它们的起点分别为 \(s_1,s_2\dots s_n\),则有定理:当且仅当 \(SG(s_1)\oplus SG(s_2)\oplus \dots \oplus SG(s_n)\ne0\) 时,这个游戏是先手必胜的。同时,这是这一个组合游戏的游戏状态 \(x\)\(SG\) 值。

这一定理被称作 \(Sprague-Grundy\) 定理(Sprague-Grundy Theorem), 简称 \(SG\) 定理。

SG定理证明

有向图游戏其实就是 \(Nim\) 游戏。

小结论:对于仅有一堆石子的游戏, \(sg(x)==x\) 因为它可转为 \(0\sim x-1\)

那么当我们把游戏合并,每一堆石子就变为了每一个起点,由于 \(sg(x)\) 会转化 \(0\sim x-1\) ,就和 \(Nim\) 游戏一样了,所以求一遍 \(sg\) 函数的 \(Nim\) 和即可。

posted @ 2022-07-05 10:48  wind_seeker  阅读(161)  评论(2)    收藏  举报
Live2D