博弈论

posted on 2024-05-29 13:18:51 | under | source

upd on 2026:入门级博客,内容相当浅显。

图游戏

OI 遇到的博弈论几乎都是公平组合游戏,给出将其转化为有向无环图的方式:将局面视作点,让当前局面向下一个可能局面连有向边。

注意,一个点实际指在对应局面下开始操作,也就是说若将先取完视作胜利的话,那么 \(0\) 号点应当是必败态:对手已经取完了。

那么便能暴力地递推得到每个点是必胜还是必败态了。

SG 函数

但是暴力终究是暴力,进一步地研究需要更好的工具:SG 函数。

简称 \(sg(x)\),递推地给出定义:\(sg(x)=\rm mex(sg(y)),y\in x\)

它具有许多良好性质。最 simple 的,实现递推功能:以无法操作为败举例,令 \(sg(\empty)=0\),那么 \(x\) 必胜当且仅当 \(sg(x)>0\)

证明:称 \(sg(x)=0\) 为必败态,反之为必胜态。那么若 \(sg(x)=0\),则意味着 \(\forall sg(y)>0\),即对手必然处于必胜态;反之,则 \(\exist sg(y)=0\),即可以通过选择使得对手处于必败态。从 \(\empty\) 开始反向递推,那么可得知“必胜态”必胜,“必败态”必败。

SG 定理

若一个游戏由多个不相干子游戏构成,那么该游戏的 \(sg\) 值为所有子游戏 \(a_1\dots a_n\) 的异或和 \(sg(a_1)\bigoplus sg(a_2)\bigoplus\dots sg(a_n)\)。该游戏必胜当且仅当 \(sg\) 值不为 \(0\)

证明:称 \(sg=0\) 为必败态,反之是必胜态。

  1. 必胜态可以转移至必败态:考虑选择子游戏 \(a_k\),其余的异或和为 \(H\),可以证明必然存在 \(k\) 使得 \(sg(a_k)\ge H\),那么让 \(sg(a_k)=H\),就好啦。由于子游戏 \(sg\) 值满足 \(sg(1\dots m)\) 的取值为一段连续区间 \([0,r]\),所以肯定可以这样调整。这不难归纳得出,因为每次 \(sg\) 值至多 \(+1\)

  2. 必败态一定转移至必胜态:证明不存在 \(y\in x,sg(x)=sg(y)\) 即可。这很显然。

综上,一定在必败态和必胜态之间来回跳动。又因为终止局面 \(\forall a_i=\empty\) 时是必败的,所以必败态必败、必胜态必胜。

nim 游戏

注意,先取完胜利。

由多个不设限的巴什游戏组成。注意到此情况下,\(sg(x)=x\),所以 \(sg=a_1\bigoplus a_2\bigoplus\dots a_n\)

阶梯 nim

有一个阶梯,每个阶梯 \(i\) 放有 \(a_i\) 个石子。轮流操作,一次操作可以选择一堆至少 \(1\) 个石子,拿出来放到下一级台阶 \(i-1\),台阶 \(0\) 不可再向下。先取完胜。

结论:\(sg=a_1\bigoplus a_3\bigoplus a_5\dots\)

即只关注下标奇数的石子堆,做 nim 游戏。为啥呢?假如我是先手必胜,那么按照奇数堆 nim 游戏的必胜策略操作。若对手也操作奇数堆,便没有影响;若是偶数堆 \(2k\),那么我紧接着让 \(2k-1\) 堆也下移相同数量的石子。所以偶数堆的影响被消去了。

posted @ 2026-01-14 17:57  Zwi  阅读(0)  评论(0)    收藏  举报