[复习资料]博弈论 - 概念篇

博弈论是我很久以前搞过的东西了,已经忘得差不多了,现将其整理成两篇博客:

本篇是概念篇。

组合游戏

公平组合游戏的定义(可能不太准确):

游戏有两个人参与,二者轮流做出决策。且这两个人的决策都对自己最有利。当有一人无法做出决策时游戏结束(注意:这里并不一定是最后一次操作的人胜)。无论二者如何做出决策,游戏可以在有限步内结束。游戏中的同一个状态不可能多次抵达。且游戏不会有平局出现。任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关。

举个例子:国际象棋就不是组合游戏,因为游戏双方只能操作自己的棋子;而 NIM 游戏就是组合游戏( NIM 游戏后面有介绍)。

组合游戏转 DAG

我们可以把组合游戏中的每个状态看做一个节点,把决策作为边,那么就可以构建出一个有向无环图(也叫游戏图),终态(即游戏结束时的状态)的出度为 \(0\)

如果状态 \(A\) 可以通过一次决策转移到状态 \(B\) ,那么我们认为 \(B\)\(A\) 的后继状态。

必败态与必胜态

我们称先手必败的状态为必败态,先手必胜的状态为必胜态。

因为每个人都是绝顶聪明的,所以:

  • 一个状态是必胜态当且仅当后继状态存在必败态。
  • 一个状态是必败态当且仅当后继状态都是必胜态。

因此证明任何组合游戏结论相当于只要证明下面两个结论:

  • 任何一个必败态只能转移到必胜态。
  • 任何一个必胜态可以转移到至少一个必败态。

NIM 游戏

地上有 \(n\) 堆石子,每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。每次只能从一堆里取。最后没石子可取的人就输了。问是否存在先手必胜的策略。

结论:如果石子数量异或和为 \(0\) ,先手必败,否则先手必胜。


NIM 游戏结论的证明:

一、任何一个必败态只能转移到必胜态。

当前石子数量异或和为 \(0\) ,因为至少要在让某堆石子数量减少 \(1\) ,异或和一定会变,所以操作后石子数量异或和不为 \(0\)

二、任何一个必胜态可以转移到至少一个必败态。

当前石子数量异或和大于 \(0\) ,假设异或和为 \(a\) ,可以找到 \(a\) 在二进制下的最高位,那么至少存在一堆石子数量的二进制包含这一位,假设这堆石子数量为 \(b\) ,那么 \((a\oplus b)<b\) ,直接把 \(b\) 拿成 \(a\oplus b\) 就行了。

其实还有一个要想到的:就是终态石子数量异或和为 \(0\) ,满足必败态的要求。


NIM 游戏是组合游戏中最基础的游戏,但是它的思想却非常妙,结论也非常简洁。

由于 NIM 游戏的结论,有时我们也把异或和称作是 NIM 和。

请注意:不要只拘束于知道结论,了解证明也是很重要的。

组合游戏的和

有多个组合游戏,游戏双方每次选择一个组合游戏进行操作,无法操作时游戏结束(再次强调:不一定是最后一次操作的人胜)。

\(\operatorname{SG}\) 函数和 \(\operatorname{SG}\) 定理

先定义 mex(minimal excludant) 运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。比如 \(\operatorname{mex}\{0,1,2,4\}=3,\operatorname{mex}\{2,3,5\}=0,\operatorname{mex}\{\varnothing\}=0\)

对于任何状态 \(x\) ,定义 \(\operatorname{SG}(x)=mex(S)\) ,其中 \(S\)\(x\) 后继状态 \(\operatorname{SG}\) 函数值的集合。这样终态的 \(\operatorname{SG}\) 函数值为 \(0\)

当规定不可操作的人败的时候,状态 \(x\)\(\operatorname{SG}\) 函数值为 \(0\) 当且仅当状态 \(x\) 为必败态。

\(\operatorname{SG}\) 定理:游戏和的 \(\operatorname{SG}\) 函数等于各个游戏 \(\operatorname{SG}\) 函数的异或和


\(\operatorname{SG}\) 定理的证明:

设第 \(i\) 个组合游戏的状态是 \(X_i\) ,组合游戏的和的状态设为 \(X\) ,不妨用括号表示组合游戏的和,即 \(X=(X_1,X_2,\dots)\) ,设 \(b=\operatorname{Xor}(\operatorname{SG}(X_i))\)

注意到每一个组合游戏的游戏图都是一个 DAG ,所以组合游戏的和的游戏图也是一个 DAG (这个比较显然),考虑按拓扑序逆序归纳证明 \(\operatorname{SG}\) 定理。

游戏和的终态就是由所有游戏的终态组成的状态,此时 \(\operatorname{SG}(X)=\operatorname{SG}(X_1)=\operatorname{SG}(X_2)=\dots=0\) ,显然有 \(\operatorname{SG}(X)=b\)

假设拓扑序后 \(k\) 个状态满足 \(\operatorname{SG}\) 定理,现在证明从后往前第 \(k+1\) 个状态也满足 \(\operatorname{SG}\) 定理,设当前状态 \(X\) 的后继状态集合为 \(S\) ,显然 \(\forall X^{ '}\in S,b\ne \operatorname{SG}(X^{'})\) ,因为不可能一个状态操作完后 \(\operatorname{SG}\) 函数值不变,接下来就是要证明 \(\forall 0\le a<b,\exist X^{'}\in S,\operatorname{SG}(X^{'})=a\) ,那么相当于要找到一个 \(i\) ,满足 \((\operatorname{SG}(X_i)\oplus (a\oplus b))< \operatorname{SG}(X_i)\) ,因为 \(a<b\) ,设 \(a\oplus b\) 的最高位为第 \(j\) 位,那么 \(b\) 的第 \(j\) 位肯定是 \(1\) (考虑如何比较两个二进制数间的大小),所以说至少存在一个 \(i\) ,满足 \(\operatorname{SG}(X_i)\) 的第 \(j\) 位为 \(1\) ,也就是 \((\operatorname{SG}(X_i)\oplus (a\oplus b))< \operatorname{SG}(X_i)\) ,由此命题得证。


\(\operatorname{SG}\) 函数和 \(\operatorname{SG}\) 定理的高明之处:如果对于一个组合游戏的和,按照前面的方法算必胜必败态,时间和空间复杂度都是所有组合游戏时间空间复杂度的乘积,而 \(\operatorname{SG}\) 函数和 \(\operatorname{SG}\) 定理成功地减小了运算!(鼓掌)

使用 \(\operatorname{SG}\) 定理解决 NIM 游戏

可以把 NIM 游戏也看作是若干个组合游戏的和,每个游戏就是给定一堆石子,每次可以取任意多数量的石子,不可取石子者判负。

此时不难发现,对于每一个组合游戏,如果记状态 \(x\) 表示石子数量为 \(x\) ,那么有: \(\operatorname{SG}(x)=x\)

于是 NIM 游戏的 \(\operatorname{SG}\) 函数值便是 \(\operatorname{SG}(a_1)\oplus\operatorname{SG}(a_2)\oplus\dots\oplus\operatorname{SG}(a_n)= a_1\oplus a_2\oplus\dots\oplus a_n\)

然后,当规定不可操作的人败的时候,状态 \(x\)\(\operatorname{SG}\) 函数值为 \(0\) 当且仅当状态 \(x\) 为必败态,所以 NIM 游戏结论得证。

结尾

本篇博客主要讲了一些博弈论的基本概念和证明。

希望对你有帮助。

posted @ 2020-09-08 22:35  xiaolilsq  阅读(266)  评论(1编辑  收藏  举报