博弈论知识汇总
\(\text{ACM}\) 中涉及的博弈一般为双人零和博弈。
巴什博弈
巴什博弈(Bash Game) 一堆 \(n\) 个物品,两人轮流从这堆物品中取物,规定每次至少取一个,最多取 \(m\) 个。最后取光者胜。
取胜法则 如果 \(n=(m+1)r+s\) ,\(r\) 为任意自然数,\(s\le m\) 。那么先取者要拿走 \(s\) 个物品,如果后取者拿走 \(k\ (k\le m)\) 个,那么先取者再拿走 \(m+1-k\) 个,结果剩下 \((m+1)(r-1)\) 个,以后保持这样的取法,那么先取者肯定获胜。
胜负关系 \(s = 0\) ,先手必败;\(1 \le s \le m\) ,先手必胜。
威佐夫博弈
威佐夫博弈(Wythoff Game) 两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
分析
我们用 \((a_k,b_k)\ |\ a_k \le b_k,\ k=0, 1, 2,\cdots,n\) 表示两堆物品的数量并称其为局势。
我们设博弈双方为甲和乙。如果甲面对 \((0,0)\) ,那么甲已经输了,这种局势我们称为奇异局势。易得前几个奇异局势为:\((0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)\) 。
可以看出 \(a_k\) 是前面局势未出现的最小的自然数,同时有 \(b_k = a_k + k\) 。奇异局势有如下三条性质:
- 任何自然数都包含在一个且仅包含在一个奇异局势中。
- 任意操作都可将奇异局势变为非奇异局势。
- 采用适当的方法,可以将非奇异局势变为奇异局势。
从如上性质可知,两个人如果都采用正确操作,那么面对非奇异局势,先手必胜
;反之,则先手必败。
奇异局势判断 对于局势 \((a,b)\) 为奇异局势满足 \(a_k = k\times \frac{1 + \sqrt{5}}{2};\ b_k = a_k + k\) 。
ak = (int)(k * (1.0 + sqrt(5.0)) / 2.0);
bk = ak + k;
尼姆博弈
尼姆博奕(Nim Game) 现有 \(n\) 堆石子,每人每次可以从其中选一堆取任意颗石子,至少取一颗,最后取光者获胜。
胜负关系 将 \(n\) 堆石子的数目做异或和,结果为 \(0\) ,则先手必败;否则先手必胜。即设 \(n\)堆石子的数目分别为 \(a_1,a_2,\cdots,a_n\) ,先手必胜当且仅当 \(a_1\oplus a_2\oplus \cdots \oplus a_n \ne 0\) 。
问题证明
我们称 \(n\) 堆石子的数目异或和为 \(Nim\) 和,\(Nim\) 和为 \(0\) 为平衡态,Nim和非 \(0\) 为不平衡。我们有:
- 博弈的输家最后肯定面对的是平衡态。
- 不平衡状态一定可以一步变成平衡状态。
- 平衡状态一步一定是变成非平衡状态。
尼姆博弈变形一
问题 现有 \(n\) 堆石子,每人每次可以从其中选出一堆,取 \(1 \le x \le k\) 颗石子,最后取光者获胜。
解决方案
只需要将每一堆的石子个数模 \(k + 1\),然后当做一般 \(Nim\) 游戏即可。
因为必胜态的一方总可以将败方操作的使得模数改变的一堆再改变回来。例如Alice操作某一堆石子使得模数从 \(x_1\) 变为 \(x_2\) ,如果当前堆原石子数大于等于 \(k+1\) ,那么Bob可以通过操作取 \(k + 1 - \text{Alice取石子数}\) 使得模数仍为 \(x_1\) 。
我们也可以将每堆石子当做是一个独立的游戏,每个独立游戏的 \(SG\) 函数为:\(SG(x) = x \%(1 + k)\) 。
尼姆博弈变形二
问题 现有 \(n\) 堆石子,每人每次可以从其中选出至多 \(k\) 堆,每堆中可以取任意颗石子,最后取光者获胜。
解决方案
将每堆石子的个数以二进制的形式表示,按位统计每一位上 \(1\) 的个数 \(sum\) 。如果每一位 \(1\) 的个数 \(sum\) 都可以被 \(k + 1\) 整除,则先手必败;否则先手必胜。
反尼姆博弈
反尼姆博弈(anti-nim) 现有 \(n\) 堆石子,每人每次可以从其中选一堆取任意颗石子,至少取一颗,最后取光者失败。
解决方案
先手必胜的条件:
- 每堆石子的数目均为 \(1\) ,且石子数异或和为 \(0\) 。
- 至少有一堆石子的数目大于 \(1\) ,且石子数异或和不为 \(0\) 。
阶梯尼姆游戏
问题 在一个阶梯上,每层有若干个石子,每次可以将某一层中若干个石子移动到他下一层阶梯中去,不能操作者失败。
解决方案
我们可以认为从奇数阶梯移动到偶数阶梯相当于是把石子从奇数阶梯拿走。这样就转化为了奇数堆的取石子游戏。
对于从偶数阶梯拿走到奇数阶梯的石子,我们可以对称地从那个奇数阶梯中拿走相等的石子到下一个偶数阶梯中去,相当于抵消掉了从偶数阶梯拿石子的操作。因为每个奇数阶梯下都有一个偶数阶梯,因此可以保证我们的操作总是可以进行。