【学习笔记】博弈论
Unnamed114514 · · 算法·理论
简单的说就是一个问题,然后在该问题下双方都按照最优策略来行动,然后对先手的必胜策略(有些时候还有方案)进行讨论的问题。
博弈论的一些性质
- 公平性
双方行动的限制都是相同的,并且双方所知道的信息都是相同的。
- 有限性
游戏所行动的步数应该是有限的,这个条件也可以等价于,如果我们达到了一个状态,那么我们应该就不会再次达到这个状态。
- 胜负性
博弈一定会有胜负,没有平局。
博弈图
如果将每个状态视为一个节点,再从每个状态向它的后继状态连边,我们就可以得到一个博弈状态图。
在博弈图上,我们可以给出如下定义:
-
必胜点:存在一种最优策略使自己必胜的点。
-
必败点:无论采用什么策略,自己都不能必胜的点。
可以发现,根据上面的胜负性,可以发现,博弈图一定可以被二染色(好像在 DAG 的背景下这是废话)。并且由于自己必胜就是对方必败,我们可以得到如下的求解方法:
-
在博弈图上,若一个点不存在后继,那么这个点就是必败点/必胜点。
-
在博弈图上,若一个点的后继中存在必败点,那这个点就是必胜点。
-
在博弈图上,若一个点的后继中不存在必败点,那这个点就是必败点。
那么根据上面的有限性,我们可以发现,博弈图是个 DAG,这就告诉我们:需要时,我们可以
经典的博弈论
Bash Game
一共
我们可以考虑以剩余的石子数为状态,建立博弈图(下图中蓝点为必胜点,红点为必败点),比如
那么我们可以猜得:当
我们仍然是通过博弈图的求解方法来证明。
证明如下:
-
若
(m+1)\mid n ,那么因为我们选择的一定是在[1,m] ,那么无论如何先手取[1,m] 中的任意整数x ,那么后手一定可以选择m+1-x ,那么每次n 都会减小m-1 ,最后一次减成0 之后先手无法移动,先手必败。 -
若
(m+1)\nmid n ,那么先手显然可以取n\mod(m+1) ,就一定可以递归为(m+1)\mid n 的情况,此时后手必败,所以如上策略先手必胜。
变形
如果是取完最后一个棋子必败,那么我们可以想到:谁都不想取最后一颗棋子,所以其实问题就转化成了
Wythoff Game
有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
我们可以证明必败点的一些性质:
引理 1:
证明:
显然。
那么所有状态的表达形式,都可以变为
引理 2:不存在
证明:
显然
同理,还可以证明不存在
引理 3:
证明:
反证法。
若存在
引理 4:
证明:
数形结合。
可以考虑这样一件事情:
首先把
那么现在我们每次可取的必败点的集合一定是两个三角形,然后每次由于
那么要证明
-
对于
\Delta<a_k ,显然应该是有x=\Delta 或者y=\Delta 经过了\Delta ,因为\Delta 一定是在a_0 到a_{k-1} 或者b_0 到b_{k-1} 出现过的。 -
对于
a_k ,现在我们需要证明a_k 的正确性。由上,可以发现a_k 一定不被x,y 轴的平行线经过,所以我们接下来考虑y=x+\beta 的形式。此时使用反证法。假设存在y=x+\beta 经过a_k,b_k ,那么\exists k'\in[0,k-1] ,y=x+\beta 经过(a_{k'},b_{k'}) 。带入有b_k-a_k=b_{k'}-a_{k'}=\beta 。与引理 2 矛盾。
由此,我们也可以得到
引理 5:
证明:
数学归纳法。
由于
那么我们现在要证的事情就是
首先我们可以知道,因为与一三象限角平分线平行的直线只覆盖到了
然后根据上面的两个三角形的性质,我们可以发现,由于该三角形每次斜边的总结距同一三象限角平分线一同增加
故此时
接下来还要证明
考虑反证:可以发现,若
那么此时我们一定把必败点的性质推导完了,此时我们还需要引出一个新的东西:
Betty 定理:若
反证法。
对于
那么我们可以假设
根据不等式的同向可加性,有
对于
假设
那么就有
我们可以发现,此时,必败点的性质和 Betty 定理中的
那么我们我们可以令
带入 Betty 定理,有
那么我们就得到了必败点的通项公式:
有了通项公式后,我们可以发现,
因此,在一个已知局面
Fibonacci Game
一堆石子有
首先我们需要一个东西:
Zeckendorf 定理:任何正整数可以表示为若干个不连续的 Fibonacci 数之和。
证明:
数学归纳法。
对于
现在我们需要证明上述定理对
-
若
m 为 Fibonacci 数,显然成立。 -
若
m 不为 Fibonacci 数。
那么存在
Zeckendorf 定理告诉我们一件事:对于任意正整数
对于这个问题,有这样一个结论:当且仅当
数学归纳法。
注意到
根据结论,容易想到对
若
那么先手只需要取
若
若
若
在实际操作的时候,
Nim 博弈
有
结论:当且仅当
那么我们回到博弈图上来证明:
-
当
a_1=\cdots=a_n=0 时,此时没有后继状态,先手必败。 -
当
a_1\oplus\cdots\oplus a_n=k\ne0 时,我们要证它是必胜点,那么等价于我们需要使得存在一个a_i' ,使得a_1\oplus\cdots\oplus a_i'\oplus\cdots\oplus a_n=0 ,那么由异或的性质,两个方程左右两边分别异或,有a_i\oplus a_i'=k ,那么此时有a_i'=a_i\oplus k 。考虑证明a_i'<a_i ,即这个取法合法,考虑位拆之后k 最高位,那么此时显然\exists i ,a_i 在该位为1 ,我们将这个i 和k 异或起来,显然比这个最高位更高的位不变,这个位变为0 ,那么我们无论后面的位怎样边,a_i' 都是<a_i 的。 -
当
a_1\oplus\cdots\oplus a_n=0 时,我们要证明它是必败点,那么就是证明不存在方案使得它能到达必胜点。反证法,考虑若\exists a_i' ,满足a_1\oplus\cdots\oplus a_i'\oplus\cdots\oplus a_n=0 ,左右两边分别异或,有a_i\oplus a_i'=0 ,即a_i=a_i' ,那么与题目要求的方案不合法。
博弈图上这个归纳的思想挺有意思的。
限定取物上界
这就是一个 Bash 博弈和 Nim 博弈的结合,于是把
容易想到若先手在 Nim 部分若有必胜策略那么他可以让自己在 Bash 和 Nim 都必胜;同样地,若先手没有必胜策略,那么他在 Nim 和 Bash 部分都必败。
综上,这个问题就是讨论的 Nim 部分,和 Bash 部分无关。
- 扩展:求最大的
k
首先异或起来不为
否则找到最大的出现次数为奇数的数
从两个方面证明它是正确的:
-
最优性:如果取比
mx-1 大的数,因为>mx 的数出现次数都是偶数,而你取比mx-1 大的数,那么就指挥修改这些出现次数是偶数的数,并不会改变异或值。 -
可行性:注意到
mx 会变为0 ,而比mx 小的数都模上mx 不会改变,由上文知比mx 大的数改变后不影响异或值,所以异或值就会变成mx ,先手必胜。
Nimk 博弈
即每次可以取
根据异或,考虑位拆,对于每一位,我们把
那么,当且仅当每一位的
阶梯博弈
每名玩家只能将石子转移到左边那一堆,或者从
若先手在奇数堆存在必胜状态,那么显然无论后手怎么取,原来奇数堆的石头仍然在奇数堆,偶数堆的石头仍然偶数堆,先手必胜;否则原来奇数堆的石头仍然在奇数堆,偶数堆的石头仍然偶数堆,最后后手取完最后一棵石头,后手必胜。
综上,我们只需要堆奇数堆做一个 Nim 博弈即可。
反 Nim 博弈
取完最后一个败。
约定
考虑博弈图的思想,递归处理:
-
-
对于
a_2 ,可以转化到b_2 。 -
根据 Nim 博弈,
a_2 可以到达b_2,a_1 ,b_2 可以到达a_2,a_1 。 -
故
ICG 博弈
问题模型是这样的:在 DAG 上有若干颗棋子,每名玩家每次可以选择一颗棋子移动,哪名玩家无法移动棋子则失败。
可以发现,我们上面讲的博弈的非扩展原始版本都是 ICG 博弈的一部分。
首先,如果只有一颗棋子,我们显然可以在博弈图上算,那如果有多颗棋子呢?
我们可以用如下方法解决:
SG 函数
计算公式如下:
可以发现,在只有一颗棋子的时候,对于这颗棋子的起始状态
SG 定理
我们令
那么当且仅当
证明:
发现这个式子很像 Nim 博弈,所以用和 Nim 博弈类似的方法证明。
-
没有后继状态
(0,\cdots,0) ,SG=0 ,上述定理成立。 -
若
SG(u_1)\oplus\cdots SG(u_m)=0 ,可以想到u 的后继点只能有两个部分[0,u-1],[u+1,+\infty) ,对于第一部分,就是个 Nim 博弈,上述定理成立;对于第二部分,可以发现如果到了u'>u ,显然u' 时可以[0,u'-1] ,那么也可以到u 。后手仍然保持该状态,知道最后到达 SG 的边界,此时先手必败。 -
若
SG(u_1)\oplus\cdots SG(u_m)\ne0 ,证 Nim 时已经证过了,显然一定存在u'\in[0,u_k-1] ,有SG(u_1)\oplus\cdots SG(u')\oplus\cdots\oplus SG(u_m)=0 ,那么此时先手必胜。
那么这样我们就可以快读地求解了,可以发现 SG 定理的难点在于 SG 里面这玩意的定义和 SG 到后继点的转移。
二分图博弈
给你一个二分图,两人轮流移动棋子,不能移动到已经到过的节点,无法移动则输。
结论:如果起点一定在二分图的最大匹配上,那么先手必胜;反之先手必败。
证明:
从二分图性质入手。
注意到增广路一共有奇数条边,那么路径上就有偶数个点,能走的点是奇数,最后走到的就是先手,后手无路可走,必败。
所以匹配点,走增广路,先手必胜。
那么先手肯定是沿着匹配边走,后手到达匹配点。
注意到这时如果后手走到匹配点的话,就走进了增广路,后手必败。
- 上文中对增广路的定义有疏漏,增广路是非匹配边后匹配边轮流,以非匹配边结束,但是上文是以匹配边开始的。
那么后手能不能走到非匹配点呢?我们令起点为
故后手只能走到匹配点。
由此,从一定在最大匹配中的点走,先手必胜。
否则,在某一个最大匹配中,先手处于非匹配点,只能走向匹配点,因为如果存在非匹配点到非匹配点的边,那么这条边可以加入最大匹配。
在这种情况下,这个点一定在最大匹配上,所以后手必胜,先手必败。
Hackenbush/树上公平删边游戏
结论是:一个节点的 SG 值等于其所有儿子的 SG 值 +1 的异或和。
对于叶子节点