2021.08.09笔记-博弈论
写在前面
讲师: \(zhoutb3333\)
内容:博弈论 杂题选讲
博弈论
规定:
先手必胜:\(N\) 状态
先手必败:\(P\) 状态
公平组合游戏
(\(SG-\) 组合游戏)
是一类可用 \(SG\) 函数解决的游戏
定义
- 游戏有两人参与,二者轮流做出决策,双方均知道游戏的完整信息,且两个人的决策均对自己最有利
- 任意一个游戏者在某一确定状态可以作出的决策集合只与当前状态有关,与游戏者无关
- 游戏中同一状态不可能多次抵达,游戏以玩家无法行动为结束,且游戏一定会在有限步后以非平局结束
(对“最有利”的解释:对于当前要做出决策的游戏者,如果他存在一种决策,使得后手进入到一个无论怎样做出决策都一定会输的状态中,那么结局一定是当前的游戏者胜)
特点
- 两个人轮流进行决策
- 拥有状态集、终止状态集、状态转移边
- 在有限步数内结束
- 游戏规则对于二人相同
组合游戏中状态空间向图的转化
将组合游戏中每一个状态抽象成图中的一个点,将每一步决策抽象成图中的一条边,我们将这个图称为该组合游戏的游戏图
这样,对于组合游戏中的每一次对弈,都可以将其抽象成游戏图中的一条从某一顶点到出度为 \(0\) 的路径
策梅洛定理
在二人的有限状态游戏中,若双方具有完全的资讯,且无运气因素,则先手/后手中必有一方有必胜/必不败的策略
证明
数学归纳法
来自命名者恩斯特·策梅洛(Zermelo's theorem)的证明大意:
设 \(N\) 是某一游戏的最大步长,比如下棋下了很多次,其中最多一次走了多少步
对 \(N\) 进行数学归纳法
\(N=1\) 时,该定理显然成立
玩家 \(A\) 只用走一步就可决定输赢,既然是取最优策略,那么显然选择胜的走法,因此玩家 \(A\) 有必胜招
设 \(i\le N\) 时命题成立,试证明 \(i=N+1\) 时命题成立
考虑 \(N+1\) 时的子游戏,除去玩家 \(A\) 走的第一步以后的游戏部分
玩家 \(A\) 第一步的每种走法都会产生一个新游戏的起始状态,它的最大步长 \(\le N\) ,由可知,每个子游戏都有唯一确定的结果,玩家 \(A\) 一定仅存在 \(3\) 种可能的状态,即胜、败或平局。此时就等价于 \(N=1\) 的情况了。相当于玩家 \(A\) 在第一步的时候选择进入哪个游戏,是自己必胜还是必败还是必和
由第二数学归纳法得证,该结论对于所有正整数都成立
证毕
注意
- 不一定是公平组合游戏
- “必不败”指获胜或平局,其中发生的平局可通过规则规避掉,如“不允许出现平局”
举例
- 五子棋
- 围棋
- 井字棋
- 国际象棋
- 中国象棋
巴什博弈
有 \(n\) 个石子,两个人轮流取,每次只能取 \([1,m]\) 个,最后取光者胜
结论:如果开始时石子数为 \(m+1\) 的倍数,那么先手必败,否则先手必胜
①当石子有 \(1\sim m\) 个时,先手必胜
②当石子有 \(m+1\) 个时,先手无论拿几个,后手都能取光,先手必败
③当石子有 \(m+2\sim 2m\) 个时,先手可以先拿走一些,使得剩下 \(m+1\) 个,此时转化为②,因此先手必胜
通过上述情况,我们发现②是一种关键的情况,即面临 \(m+1\) 个石子的人一定失败
因此想要自己获胜,就需要通过拿走石子,使得对方拿石子时还有 \(m+1\) 个
再向一般情况推广:
若当前石子数为 \(n=k\times(m+1)+r\),先手会先拿走 \(r\) 个,接下来若后手拿走 \(x\) 个,则先手会拿走 \(m+1-x\) 个,这样下去后手必败
若当前石子数为 \(n=k\times(m+1)\),设先手先拿走 \(x\) 个,则后手一定会拿走 \(m+1-x\) 个,这样下去先手必败
证毕
CHOMP! 博弈
给一个 \(n\times m\) 的网格,每次可以取走一个格子已及它右上方的格子,取到左下角格子的人输
结论:除了 \(1\times 1\) 的网格,先手必胜
反证法
设后手能取得胜利,那么先手可以第一步拿走 \((m,n)\),若后续回合中后手通过拿走 \((x,y)\) 达到了必胜状态,先手均可以第一步就拿走 \((x,y)\) 来达到必胜状态
证毕
由于无法给出构造性证明,所以只能证明先手必胜,而不能给出广义的必胜策略
若取到左下角格子的人胜呢?
结论:无论 \(n,m\) 是多少,先手都必胜
因为刚才的分析没有依赖于终止状态是 \(N\) 还是 \(P\)
约数博弈
现在黑板上写下 \(1\sim n\),每次擦掉一个数和它的所有约数,擦掉最后一个数字的人获胜
先手必胜
是 \(chomp!\) 思想的应用
假设后手能取得胜利,那么先手可以第 \(1\) 步拿走 \(1\),若后续回合内后手通过拿走 \(x\) 达到了必胜状态,先手均可以第一步就拿走 \(x\) 来达到必胜状态
证毕
若擦掉最后一个数字的人输呢?
结论:除了 \(n=1\) 时先手必败之外,先手必胜
证明略(其实和上面的 \(CHOMP!\) 博弈是一样的)
NIM游戏
有 \(n\) 堆石子,每堆有 \(a_i\) 个,每次从一堆中取任意个,取完最后一个石子者获胜
结论:如果 \(\oplus a_i=0\),那么先手必败,否则先手必胜
看了nnnneeeekkkkoooo哥哥哥哥哥哥哥哥的的的的视视视视频频频频的同学可以跳过这一段。😍
只需证:
任 意“\(\oplus a_i=0\)”的状态只能转移到“\(\oplus a_i\not=0\)”的状态。因为取一堆里任意多的石子,\(\oplus a_i\) 一定会变
任意“\(\oplus a_i\not=0\)”的状态可以转移到至少一个“\(\oplus a_i=0\)”的状态。设当前 \(\oplus a_i=T\),随便找到一个 \(highbit(T)\) 为 \(1\) 的 \(x\) ,则一定有 \(x>T\oplus x\),那么从 \(x\) 中取 \(x-T\oplus x\) 个石子即可
为什么 \(x>T\oplus x\)?
首先对于 \(highbit(T)\) 之前的位, \(T\oplus x\) 与 \(x\) 相同。而对于第 \(highbit(T)\),\(x\) 为 \(1\) 而 \(T\oplus x=0\)
证毕
ANTI-NIM游戏
如果取最后一个石子的人输呢?
结论:\(a_i\) 全为 \(1\) 而 \(2\mid n\) 时先手必胜,\(a_i\) 不全为 \(1\) 且 \(\oplus a_i\not= 0\) 时先手也必胜
①如果 \(a_i\) 全为 \(1\),那么显然 \(2\mid n\) 先手必胜,否则先手必败
②如果只有一个 \(a_i>1\) 时则先手必胜。因为如果 \(2\mid n\) 就拿掉一整堆,如果 \(2\nmid n\) 那就拿掉剩下一个(此时 \(\oplus a_i\not= 0\))
③如果至少有两个 \(a_i>1\),若 \(\oplus a_i=0\),那么可能转移为两种状态:至少两个 \(a_i>1\) 且 \(\oplus a_i\not=0\),或者只有一个 \(a_i>1\)(此时转化为②,因此先手必败);若 \(\oplus a_i\not=0\),那么一定可以转移为 \(\oplus a_i=0\),并且仍然保持至少有两个 \(a_i>1\)
关于“仍然保持至少有两个 \(a_i>1\)”的证明:
考虑 \(T\oplus x=1\) 的可能
\(>1\) 是因为这里是讨论把一个 \(>1\) 的拿成 \(=1\) 导致 \(>1\) 的变少
可行的 \(x\) 是指 \(highbit(T)\) 为 \(1\) 的 \(x\),并且它们都是 \(>1\) 的
如果可行的 \(x\) 都满足 \(T\oplus x=1\),那么所有的 \(x\) 都相等
拿掉其中一个 \(x\) 后 \(T\) 变为 \(0\),那么还有偶数个等于 \(x\) 的,不然 \(T\) 不能变为 \(0\)
证毕
凯爷 \(yyds!\)
SG函数
是对游戏图中每一个节点的评估函数
定义:
(\(mex\):最小的没有在该集合中出现的自然数 )
整个游戏的 \(SG\) 函数就是各个子游戏的异或和
对于某一状态而言:
- 如果没有后继状态,则 \(SG\) 函数为 \(0\) ,表示必败
- 如果后继状态中存在必败状态,那么 \(SG\) 函数为正,表示必胜
- 如果后继状态全是必胜,那么 \(SG\) 函数为 \(0\) ,表示必败
这和对抗搜索想法一致,但是 \(SG\) 函数允许快速合并多个子局面
关于用异或来算 \(SG\) 函数是怎么想出来的,戳这里
EVERY游戏
要求每一个可以移动的棋子都要移动,最后不能操作者输
若一个游戏必胜,则尽量延长它的时间
若一个游戏必败,则尽量缩短它的时间
每个状态记下步数,必胜态取 \(max\) ,必败态取 \(min\) 。如果最长的必胜局比最短的必胜局还短,那就是输了,否则就赢了
定理:对于 \(EVERY-SG\) 游戏先手必胜当且仅当单一游戏中最大的 \(step\) 为奇数
证明见贾志豪的论文
阶梯NIM游戏
往每个台阶上放 \(a_i\) 个石子,每次把一堆里的任意多个往下移一个台阶,无法移动者输
结论:\(SG=\) 奇数号台阶石子的异或和,也就是说偶数号台阶没用。\(SG=0\)先手必败,否则先手必胜
必胜方移动时,移动奇数号台阶
若对方移动的是奇数号,那他继续移动他应该移的即可;若对方移动的是偶数号,那照搬对方刚移过的那个。必胜方不能主动移动偶数号,即能获胜
若先手将偶数层的石子移到了奇数层,后手可以将同等数量的石子从那个奇数层移到下一个偶数层,(注意 \(0\) 层是偶数层)。这样,\(SG\) 值并不会变化,所以相当与先手的操作是无效的。若后手有更优的走法,那先手一定处于劣势。因此,先手这样操作,弊大于利
若先手将奇数层的石子移动到偶数层,可类比成普通的取石子游戏:将某一堆石子取走若干个。因为只要奇数层上还有石子,我们总能把它从奇数层移动到偶数层,所以相当于在普通的取石子游戏中,只要还有剩余的石子,我们总能取走它
证毕
树上NIM游戏
往每个节点上放 \(a_i\) 个石子,每次把一堆里的任意多个移到他的父亲上,不能移动者输
和阶梯 \(Nim\) 一样,\(SG=\) 奇数深度节点石子的异或和。\(SG=0\)先手必败,否则先手必胜
证明略
例题
-
数学带师玩石子
一堆石子,每次取 \(p^k\) 个,无法操作者输
\(k\ge 0\)
-
人人尽说江南好
-
江南乐
-
一双木棋
-
Alice和Bob又在做游戏
[UOJ 266]【清华集训2016】Alice和Bob又在玩游戏
-
兔兔与蛋蛋游戏
-
移动金币
杂题选讲
-
最大前缀和
-
[PKUWC 2019] 拓扑排序
给定一个有向图,随意保留一个边的子集,求合法拓扑序个数的期望
\(n\le 20\)
-
The Number of Subpermutations
[CF1175F] The Number of Subpermutations
\(O(1)\) 查前缀最大值
-
大碗宽面
[LOJ 6623]「THUPC 2019」大碗宽面 / median
大碗牢饭! -
鱼
计算几何
极角 极坐标(???
-
[省选联考 2021]卡牌游戏
固定左端点,右端点就具有二分性
维护双指针,枚举左端点
离散化
-
寻找车位
线段树
\(O(nm\log n)\)
一定要写***
-
神秘数
主席树
-
[Luogu T59576] 下一个回文树
细节细节细节!!!!!
一定要写***
-
[ZJOI 2017] 树状数组
-
[CTSC 2010] 性能优化
魔改的 \(FFT\)
不会
【引用参考】