博弈论常见模型总结
取石子游戏模型集合
平等组合游戏
-
两人游戏。
-
两人轮流走步。
-
有一个状态集,而且通常是有限的。
-
有一个终止状态,到达终止状态后游戏结束。
-
游戏可以在有限的步数内结束。
-
规定好了哪些状态转移是合法的。
-
所有规定对于两人是一样的。
N状态(必胜状态),P状态(必败状态)
那么我们定义两个状态之间的转换:
所有的终止状态都为P状态
-
对于任意的N状态,存在至少一条路径可以转移到P状态
-
对于任意的P状态,只能转移到N状态
取石子游戏一
有两个游戏者, $ A $ 和 $ B $ ,有 $ n $ 颗石子,约定:两人轮流取走石子,内次可以取 $ 1,2或3 $ 颗, $ A $ 先取,取走最后一颗石子的人获胜
$ 0,4,8,12... $ 等状态就是对于先手的 $ P $ 状态,其他则是对于先手的 $ N $ 状态
将这个问题换成每次只能取走 $ 1 $ ~ $ m $ 个石子,如果 $ n%(m+1)=0 $ ,则是先手必败状态,否则是先手必胜状态这就是巴什博弈
若是走到最后失败的游戏,则是 $ Anti\space Nim $
取石子游戏二
拓展一下一,定义一个集合 $ S={p_1,p_2...,p_k}(k\in Z^{*}) $ , $ A,B $ 在游戏的时候取走的石子数必须是集合里的数,其他条件不变
考虑 $ N $ 状态,引入一个新的东西 $ -> $ $ SG $ 函数,定义如下:
其中, $ mex $ 是第一在整数集合上的操作,它的自变量是任意整数集合,函数值是不属于该集合的最小自然数
终止状态的 $ SG $ 值显然为 $ 0 $ ,并且 $ SG $ 为 $ 0 $ 的状态就是 $ P $ 状态,否则为 $ N $ 状态, $ SG $ 值为 $ 0 $ 的状态,说明它的所有后继状态都不为 $ 0 $ ,也就是它只能转移到非 $ 0 $ 状态,而 $ SG $ 值不为 $ 0 $ 的状态则不一样,那么 $ SG $ 值为 $ 0 $ 的状态就是必败态的定义, $ SG $ 值不为 $ 0 $ 的状态就是必胜态的定义,所以我们只需要用集合 $ S $ 求出每个状态的 $ SG $ 值即可
取石子游戏三
有 $ n $ 个石子, $ A,B $ 两人轮流取石子,规定他们每次至多只能取走当前石子总数 $ ⌈\frac{s}{2}⌉ $ 个石子,问 $ A $ 先手是否有必胜策略
打下表 $ : $
找到规律,数列在间隔递增,上一行的数间隔着插在下一行的数的中间,先手必败当且仅当 $ SG $ 值为 $ 0 $
取石子游戏四( $ nim $ 游戏)
有 $ n $ 堆石子,石子数目分别为 $ x_1,x_2,...,x_n $ , $ A,B $ 两人每次可以选择一堆石子取走任意多个,问 $ A $ 先手是否有必胜策略
相当于二的拓展
有多堆石子,因此可以得到多个 $ SG $ 值,而且这些 $ SG $ 值必定为 $ x_1,x_2,..,x_n $ ,但是如何才能从这些 $ SG $ 值得到整局 $ SG $ 值呢, $ nim $ 游戏中先手必败当且仅当 $ XOR_{i=1}^{n}{x_i}=0 $ ,证明:
当 $ nim $ 游戏的 $ SG $ 值为 $ 0 $ 时,假定取 $ x_k $ 中的一些石子,使其变成 $ x_{k}' $ ,假设 $ XOR_{i=1}{n}{x_i}=0={XOR_{i=1}[k≠i]} xor\space x_k' $ ,所以 $ x_k=x_k' $ ,故这是错误的,因此再去走石子后, $ SG $ 必然发生改变
对于一个 $ SG $ 值不为 $ 0 $ 的状态,必然可以通过一个操作,使其 $ SG $ 值变为 $ 0 $ ,我们只需要找到当前 $ SG $ 最左段位 $ 1 $ 的一列,任意找到一堆石子使那一列同样为 $ 1 $ ,从这对中取走若干石子,使其 $ SG $ 值为 $ 0 $ ,这是显然可以的,因为那一列变成 $ 0 $ ,这个数就必然变小了,对于其他列只需要把 $ 0 $ 变成 $ 1 $ , $ 1 $ 变成 $ 0 $ 即可
取石子游戏五( $ Nimk $ )
有 $ n $ 堆石子,石子数目分别为 $ x_i $ , $ A,B $ 两人可以选取最多 $ k $ 堆石子,并从每堆石子堆中取走任意多的石子,问 $ A $ 是否有必胜策略
~~ $ Nim $ 游戏就是 $ Nimk $ 中 $ k=1 $ 的情况~~
$ Nimk $ 存在必胜策略,当且仅当将所有石子数转成二进制后,存在某位上,所有二进制中 $ 1 $ 的个数之和 $ %(k+1) $ 不为 $ 0 $ ,用数学语言表述,则存在一个数 $ t $ ,使得 $ (\sum_{i=1}^n{x_i \space xor \space 2^{t-1}})%(k+1)≠0 $ ,即(把 $ n $ 堆石子的石子数用二进制表示,统计每个二进制位上 $ 1 $ 的个数,若每一位上 $ 1 $ 的个数 $ mod(k+1) $ 全部为 $ 0 $ ,则必败,否则必胜。)
证明:
1.全为0的局面一定是必败态。
2.对于任意一种必胜状态,必然存在一种取石子方式,使得其可以转移到必败状态,我没设必胜状态下, $ 1 $ 的个数 $ %(k+1) $ 不为 $ 0 $ 的最高二进制位上有 $ m $ 个 $ 1 $ ,则将这些 $ 1 $ 都改成 $ 0 $ 需要更改 $ m $ 堆
3.若遇到下一个二进制位上, $ 1 $ 的个数 $ %(k+1) $ 不为 $ 0 $ ,记该位上有 $ r $ 个 $ 1 $ ,并且记之前改变的 $ m $ 堆在该位上有 $ a $ 个 $ 1 $ 和 $ b $ 个 $ -1 $ (所有变量都是在 $ %(k+1) $ 之后的值)
分类讨论一下:
-
$ a≥r $ ,则将 $ r $ 个 $ 1→0 $
-
$ b≥k+r-1 $ ,则将 $ k+1-r $ 个 $ 0→1 $
-
$ a<r $ 且 $ b<k+1-r $ ,则我们改变之前 $ m $ 堆意外的 $ r-1 $ 堆,那么我们改变的堆数为 $ m+r-1→a+b+r-a→b+r $ ,又因为 $ b+r<k+1-r+r→k+1 $ ,所以我们改变的堆数 $ m-r+a<k+1 $ ,那么这样的改法是合法的
重复上述操作,我们必然能使每一位上的 $ 1 $ 的个数 $ %(k+1) $ 为 $ 0 $ ,即转移到先手必败态
那么对于任意一个先手必败态而言,由于我们每次最多只能选取 $ k $ 堆,所以我没不能再同一二进制位上改变 $ k+1 $ 个值;而且每次改变会导致一系列的连锁反应,因此我没无法从一个先手必败态转移到先手必败态,证毕
取石子游戏六( $ Wythoff's\space Game $ )
有两堆石子,个数为 $ x_1 $ , $ x_2 $ ; $ A,B $ 轮流取石子,规定要么只取一堆的任意一个,要么在两堆里取同样任意多个,问 $ A $ 先手是否有必胜策略
威佐夫博弈的性质
首先,由题目可知,当这两堆石子一样多时,先手获胜;当有一堆石子为空时,先手获胜。
设 $ (a[i],b[i]) $ 表示先手必败的局势,其中 $ a[i],b[i] $ 分别表示两堆石子的个数,我们又称这种话局势为奇异局势
若两堆石子的初始状态为 $ (1,2) $ ,则有以下 $ 4 $ 种情况:
1.先手从第一堆中取一个,后手从第二堆中取两个,先手输,后手赢
2.先手从第二堆中取一个,后手将两堆都取一个,先手输,后手赢
3.先手从第二堆中取两个,后手从第一堆中取一个,先手输,后手赢
4.先手从两堆中各取一个,后手从第二堆中取一个,先手输,后手赢
则,若石子状态是 $ (1,2) $ 时,先手必输
列举一下:
小插曲:广义斐波那契数列的通项公式是 $ a_n=\frac{1}{\sqrt 5}{(φn-(1-φ)n)} $ ,其中 $ φ=\frac{1+\sqrt 5}{2} $ ,威佐夫数表包含了所有可能的广义斐波那契数列
威佐夫博弈的结论
(1)状态是单调递增的
(2)状态的石子数量的差是个等差数列(公差为1),这个序列为:0,1,2,3,4,5,6,7,8,9,10,11......
(3)状态的第一个数字是之前没有出现过的第一个数字。比如说第二个状态的第一个数字1,就是前几个状态没有出现的数字。
(4)每个状态的第一个数字竟然是这个状态的两堆石子数量的差∗1.618
关于1.618
$ 1.618 $ 是一个非常神奇的数字,它既是黄金分割率的近似值 $ +1 $ ,即 $ 0.618+1 $ ,也是 $ \frac{1+ \sqrt 5}{2} ≈ 1.618 $
$ beatty数列 $ 和 $ beatty定理 $
取无理数 $ α,β $ ,使得 $ \frac{1}{α}+\frac{1}{β}=1 $ ,构造两个数列 $ a_n,b_n $ ,它们的通项为 $ a_n=\lfloor αn \rfloor $ , $ b_n=\lfloor βn \rfloor $
取石子游戏七 (斐波那契 $ Nim $ )
有一堆个数为 $ n $ 的石子, $ A,B $ 轮流取石子,满足:
- 先手不能再第一次把所有石子取完
- 之后每次可以取的石子数介于 $ 1 $ 到对手刚取的石子数的 $ 2 $ 倍之间(包含 $ 1 $ 和对手刚取的石子数的 $ 2 $ 倍)
约定取走最后一个石子为赢家,问 $ A $ 先手是否有必胜策略
设 $ fib(i) $ 表示斐波那契数列的第 $ i $ 项
证明:当 $ n $ 为大于等于 $ 2 $ 的斐波那契数时先手必败
-
$ n=2 $ 时,显然先手必败
-
若 $ n\le fib(k) $ 且为斐波那契数时,先手必败
那么 $ n=fib(k+1) $ 时,先手第一次不能拿大于等于 $ fib(k-1) $ 个物品,如果这样,那么第一次拿完后剩余的物品数为 $ n' \le fib(k+1)-fib(k-1)=fib(k)=fib(k-1)+fib(k-2) \le 2 fib(k-1) $
那么后手在第二次可以直接取得胜利,因此先手第一次拿的物品必须小于 $ fib(k-1) $ ,把 $ fib(k-1) $ 看做一个子游戏,由假设可得后手可以恰好把 $ fib(k-1) $ 取完,那么现在游戏只剩 $ fib(k) $ 个物品,由假设得先手必败
综上所述, $ n $ 为斐波那契数时先手必败
接下来我们证明: $ n $ 不为斐波那契数时先手必胜
引入齐肯多夫定理:任何整数都可以被分解成若干个不连续的斐波那契数之和
证明:
-
$ n=1,2,3 $ 时, $ fib(2)=1,fib(3)=2,fib(4)=3 $ 命题成立
-
若 $ n\le k $ 时命题成立
那么 $ n=k+1 $ 时,若 $ n $ 为 $ fib $ ,命题成立, $ n $ 不是斐波那契数时,设 $ fib(m)<n<fib(m+1),n'=n-fib(m) $ ,则有 $ n'<fib(m+1)-fib(m)=fib(m-1)<m $
因为 $ n'<n $ ,有因为归纳法假设 $ n' $ 可以表示成不连续的 $ fibnacci $ 数列之和,即 $ n'=fib(p_2)+fib(p_3)+...+fib(p_t),(p_2>p_3>...>p_t) $ 且不是连续的整数,有因为 $ n'<fib(p_1-1) $ ,所以 $ p_2<p_1-1 $ ,即 $ p_1,p_2 $ 也不是连续的整数
故 $ n=n'+fib(p_1)=fib(p_1)+fib(p_2)+...+fib(p_t),(p_1>_2>...>p_t) $ 且不是连续的整数,所以该定理成立
所以 $ Zeckendorf定理(齐肯多夫定理) $ 对所有的 $ n,n\in Z^* $ 都成立
再证明 $ fibnacci数列 $ 的必败证明:
首先给出三个定理:
- $ fib(n+1)<2*fib(n)<fib(n+2) $
- $ fib(n+2)❤️*fib(n) $
- $ 4fib(n)❤️fib(n+1),(4fib(n)❤️(fib(n)+fib(n-1))->fib(n)<fib(n+1)❤️*fib(n-1) $
同样运用数学归纳法:
- 当 $ i=2 $ 时,先手只能取 $ 1 $ 颗,显然必败,结论成立
- 假设当 $ i\le k $ 时结论成立,则当 $ i=k+1 $ 时, $ fib(i)=fib(k)+fib(k-1) $
则我没可以吧这一堆石子看成两堆,简称 $ k $ 堆,和 $ k-1 $ 堆
$ (一定可以看成两堆,因为假如先手第一次取的石子数≥fib(k-1),则后手可以直接取完fib(k),因为fib(k)<2*fib(k-1)) $
对于 $ k-1 $ 堆,由假设可知,不论先手怎么取,后手总能取到最后一颗,对后手取的石子数 $ x $ 情况的分析:
如果先手第一次取的石子数 $ y≥\frac
{fib(k-1)}{3} $ ,则这小堆所剩的石子数小于等于 $ 2y $ ,即后手可以直接取完,此时 $ x=fib(k-1)-y $ ,则 $ x\le \frac{2*fib(k-1)}{3} $
因为 $ \frac{2*fib(k-1)}{3}<\frac{fib(k)}{2} $ ,所以可得 $ x<\frac{fib(k)}{2} $
即后手取完 $ k-1 $ 堆后,先手在能取最多石子的情况下不能一次性取完 $ k $ 堆,所以游戏规则没有改变,由假设可知 ,对于 $ k $ 堆,后手仍能取到最后一颗,所以后手必胜
即 $ i=k+1 $ 时,结论依然成立,对于不是 $ fibonacci数列 $ ,首先进行分解,分解的时候,要取尽量大的 $ fibonacci数 $ ,比如分解 $ 85 $ , $ 85 $ 在 $ 55 $ 和 $ 89 $ 之间,于是可以写成 $ 85=55+30 $ ,然后继续分解 $ 30 $ , $ 30 $ 在 $ 21 $ 和 $ 34 $ 之间,所以可以写成 $ 30=21+9 $ ,故可以分解为 $ 85=55+21+8+1 $
则我们可以把 $ n $ 写成 $ n=fib(p_1)+fib(p_2)+...+fib(p_k),(p_1>p_2>...>p_k) $ ,我们令先手先取完 $ fib(p_k) $ ,即最小的这一堆,由于各个 $ fib $ 之间不连续,则 $ p_{k-1}>p_{k+1} $ ,则有 $ fib(p_{k-1})>2*fib(p_k) $ ,即后手只能取 $ fib(p_{k-1}) $ 这意味,且不能一次取完
此时后手相当于面临这个子游戏(只有 $ fib(p_{k-1}) $ ,这一堆石子,且后手先取)的必败态,即先手一定可以取到这一堆的最后一刻石子,同理可知,对于以后的每一堆,先手都可以取到这一堆的最后一颗石子,从而取得游戏的胜利
取石子游戏八( $ staircase Nim $ 即 $ 阶梯 Nim $ )
有 $ n $ 堆石子,每堆石子的数量为 $ x_1,x_2,...,x_n $ , $ A,B $ 轮流操作,每次可以选第 $ k $ 堆中的任意多个石子,放到第 $ k-1 $ 堆中,第 $ 1 $ 堆中的石子可以放到第 $ 0 $ 堆中,最后无法操作的人为输,问 $ A $ 先手是否有必胜策略
先手必败当且仅当奇数阶梯上石子数异或和为 $ 0 $
证明:
假如我们是先手,我们就按照这个方法将多余的石子从奇数堆移动到偶数堆里面
此后如果对手一道的是奇数堆,我们就继续移动奇数堆,使得 $ SG $ 值重新变为 $ 0 $ ;若果对手移动的是偶数堆,我们就将他移动到奇数堆中的石子继续往下移
这样进过多次操作我们总能使奇数堆保持必胜状态,最后我们总可以在对手之后将石子从奇数堆移动到偶数堆,最后移动到第 $ 0 $ 堆,这样对手就不能移动了
所以通过整个过程,我们可以发现,偶数堆中的石子,不会影响整个游戏的结果,只有奇数堆中的石子会影响游戏结果,因此对这个游戏而言,先手必败当且仅当奇数堆中的石子数异或和为 $ 0 $
取石子游戏九( $ Anti \space Nim $ )
这是四 $ (Nim) $ 的变向版本,其他条件均不变,唯独定义:取到最后一个石子的人为输,那么 $ A $ 先手是否有必胜策略
这个游戏胜利当且仅当:
- 所有对石子数都为 $ 1 $ ,且 $ SG $ 值为 $ 0 $
- 至少有一堆石子数大于 $ 1 $ 且 $ SG $ 值不为 $ 0 $
证明:
对这个游戏分析,将其分成两种情况
- 所有对的石子数均为 $ 1 $
- 至少有一堆石子数大于 $ 1 $
对于第一种情况而言,易得当堆数为奇数时,先手必败,否则先手必胜
对于第二种情况而言,分两种情况讨论
- 当 $ SG $ 值不为 $ 0 $ 时:若还有两堆石子数目大于 $ 1 $ 时,我们将 $ SG $ 值变为 $ 0 $ 即可,若只有一堆石子数目大于 $ 1 $ 时,我们总可以让状态变成有奇数个 $ 1 $ ,所以当 $ SG $ 不为 $ 0 $ 时,先手必胜
- 当 $ SG $ 值为 $ 0 $ 时:这样的话至少会有两堆石子数目大于 $ 1 $ ,那么先手决策完之后,必定会使局面 $ SG $ 不为 $ 0 $ ,这样便到了先手必胜局,所以当 $ SG $ 为 $ 0 $ ,先手必败
这些推导都只对 $ Anti \space Nim $ 成立,堆于 $ Anti\space SG-组合游戏 $ 这个推论会死不成立的,可以看->[贾志豪《组合游戏略述——浅谈SG游戏的若干拓展及变形》
[博弈论拓展,囚徒博弈论,枪手博弈论,海盗分金](简单食用的博弈论 - 洛谷专栏)
本文来自博客园,作者:Ech0_7,转载请注明原文链接:https://www.cnblogs.com/empty-space/p/18547985