一文看懂博弈【全网最详细,包含所有证明】

摸鱼摸太久了没有那种什么都不想的肝劲了,导致一年了还是很垃圾被人瞧不起了

ICG问题(impartial combinatorial game公平组合游戏)

  • 有两个玩家,游戏规则对两人公平
  • 游戏状态有限,能走的步数也有限
  • 两人轮流走步,一个玩家不能走步时游戏结束
  • 游戏的局势不能区分玩家身份。像围棋这样有黑白两方的游戏就不属于此类问题。

特征:给定初始局势,指定先手玩家,双发采取最优策略,获胜者定。

图游戏

给一个有向无环图 G ( X , F ) G(X,F) G(X,F) X X X是点(局势)的非空集合, F F F X X X上的函数,对于 x ∈ X x\in X xX,有 F ( x ) ⊂ X F(x)\subset X F(x)X
ICG问题都可以转化为基于图的游戏。

巴什博弈 bash game

规则:有一堆n个石子。每次a和b可以取1~m个石子。不能取的输。
结论 n m o d    ( m + 1 ) = 0 n\mod (m+1) =0 nmod(m+1)=0则先手必败。否则,先手必胜。
证明
先手拿了x个( x ∈ [ 1 , m ] x\in [1,m] x[1,m]),那么后手必然可以使得该轮两者共拿了 ( m + 1 ) (m+1) (m+1)个。最后必然是后手拿走最后一个石子。
否则,先手可以拿 n m o d    ( m + 1 ) n \mod (m+1) nmod(m+1)个石子,问题转化为b是先手的必败态。

扩展巴什博弈

规则:有一堆n个石子。每次可以取 P = { a , a ∈ N + } P=\{a,a\in N^+\} P={a,aN+}个石子。
结论:结果存在周期性。先得出前几个的结果,再进行动态规划或直接求出周期取余计算。

斐波那契博弈 fibonacci nim

规则:有一堆n个石子,先手第一次不能取完所有石子。以后每一次取,都只能取不超过上一次取的石子数的两倍的石子。不能取的输。
结论若n是斐波那契数,则先手必败。否则,先手必败。
证明
用数学归纳法mathematic induction:当石子数为1和2时,很显然,结论成立。现假设石子数为任意a<x(x为一个斐波那契数)(a为比x小的所有斐波那契数),f(a)结论都成立。我们证明f(x)也成立。
f(x)个石子可以拆分成f(x-1)和f(x-2)个石子。若先手拿走大于等于f(x-1)个石子,由于 2 × f ( x − 1 ) > f ( x − 2 ) 2\times f(x-1)>f(x-2) 2×f(x1)>f(x2),后手必然可以一次性拿完剩下的石子。因此先手必然拿少于f(x-1)个石子。
因此我们把f(x)个石子拆成两堆。大小分别为f(x-1)和f(x-2)。因为先手必然拿少于f(x-1)个石子。对于f(x-1)个石子的这一堆来看,就等同于把问题的规模转化为了前一个斐波那契数。由数学归纳法的假设,f(x-1)这一堆的最后一个石子必然是后手取的。
假设后手在f(x-1)堆最后一次取的石子数目为m。我们先得出m最大可能为多少。显然这堆石子只有先手取过一次,然后后手就取完的时候m最大。即先手取的数为f(x-1)/3。此时后手取的m最多为 2 ∗ f ( x − 1 ) / 3 2*f(x-1)/3 2f(x1)/3。接下来先手在堆f(x-2)中取石子。他能取的最多为4*f(x-1)/3。将这个数与f(x-2)进行比较(相减),发现大于f(x-2)。
于是先手在堆f(x-2)中取的时候,他也无法一次取完。那么这个问题又转化成归纳法的假设。这一堆石子的最后一个也是后手取的。
至此,我们证明了f(x)也满足结论。由数学归纳法,可知结论前一半(是斐波那契数时必败态)正确。
当不是斐波那契数时,先手可以把石子数目变成最近的一个斐波那契数。因此必胜。证毕。

威佐夫博弈 Wythoff Game

想起以前gym过一次,出了威佐夫博弈变体。要重新推判断式,特别有意思。其实掌握推导过程就好。
规则:有两堆石子,一堆n个,另一堆m个。要么一堆里取任意个石子,要么两堆一起取等量任意个石子。
结论:若满足奇异局势,则必败态。否则必胜态。奇异局势:(a,b)满足 [ a b s ( b − a ) ∗ ϕ ] = m i n ( a , b ) [abs(b-a)* \phi] = min(a,b) [abs(ba)ϕ]=min(a,b)。( ϕ \phi ϕ为黄金分割比例 1 + 5 2 \frac{1+\sqrt{5}}{2} 21+5
证明:
我们可以逐个推导出必败局势和必胜局势。
首先我们可以看出,威佐夫博弈可以看作另一个游戏。即在棋盘某个位置有一个皇后。我们可以把皇后往右、或往下、或往右下方向移动任意个位置。移动到无法移动(即棋盘右下角)则游戏结束。
于是我们把局势画成一张网格。标记必胜态和必败态。
推导方式:
(1)(0,0)是必败态。
(2)能到达必败态的点是必胜态。
(3)不能到达必败态的点是必败态。
相当于每次加入一个必败态,他所在的横行、竖行和斜行都因此成为必胜态。没有被标记为必胜态的最边界的点自动成为必败态。
图片
观察这些点,(0,0),(1,2),(3,5),(4,7),(6,10),(8,13)。。。我们发现规律。两两之差是0,1,2,3,4,。。。我们将奇异局势表示为 ( a k , b k ) (a_k,b_k) (ak,bk),满足 a k + k = b k a_k+k=b_k ak+k=bk。(当然,(2,1),(5,3)。。也是奇异局势。这里仅考虑前者小于后者。)
现引入一个贝蒂定理:若正无理数 a a a b b b满足 1 a + 1 b = 1 \frac{1}{a}+\frac{1}{b}=1 a1+b1=1,则 P = { [ a n ] , n ∈ N + } P=\{ [an],n\in N^+ \} P={[an],nN+} Q = { [ b n ] , n ∈ N + } Q=\{ [bn],n\in N^+\} Q={[bn],nN+}构成 N + N^+ N+的划分。
贝蒂定理证明转载自https://www.cnblogs.com/techflow/p/13168267.html
考虑用贝蒂定理表示奇异局势。那么同时满足 [ a n ] + n = [ b n ] [an]+n=[bn] [an]+n=[bn]
[ a n ] + n = [ a n + n ] = [ ( a + 1 ) n ] = [ b n ] [an]+n=[an+n]=[(a+1)n]=[bn] [an]+n=[an+n]=[(a+1)n]=[bn],对于每个 n n n成立。
那么 a + 1 = b a+1=b a+1=b。代入 1 a + 1 b = 1 \frac{1}{a}+\frac{1}{b}=1 a1+b1=1可得 a = 1 + 5 2 a=\frac{1+\sqrt{5}}{2} a=21+5 (黄金分割数)。

尼姆博弈 nim game

规则:有m堆石子,数量分别为 a 1 , a 2 , . . . , a m a_1,a_2,...,a_m a1,a2,...,am。每次可以从一堆中取不限个。没有石子可取者败。
结论尼姆和(异或和)为0则必败。(Bouton定理)
证明
我们把游戏抽象为图问题。
(0,0,。。。,0)为无法转移的节点。
必败态为必然会转移到必胜态或自身无法转移(即不能转移到必败态)的节点。
必胜态为可以转移到必败态的节点。
首先(0,0,0,…,0)是必败态(无法转移的节点)。其异或和为0。
假设 ( a 1 , a 2 , . . . , a m ) (a_1,a_2,...,a_m) (a1,a2,...,am)的异或和为 S ≠ 0 S\neq 0 S=0。他可以一步走到异或和为0的状态。
而异或和为0的状态必然走到异或和不为0的状态。
如果证明上述,我们就证明了结论。
那么我们先证明 ( a 1 , a 2 , . . . , a m ) (a_1,a_2,...,a_m) (a1,a2,...,am)的异或和 S ≠ 0 S\neq 0 S=0的时候可以一步转移到异或和为0。找到 S S S最高位的1, a 1 , . . . , a m a_1,...,a_m a1,...,am中必然有至少一个数在这一位有1。找到该数,这一位改为0,则 S S S的这一位就变为了 0 0 0 S S S剩下的位中有1的地方,都可以用该数改位来转为0。即证。
接下来证明异或和为0的状态必然走到异或和不为0的状态。很显然。因为必然要改变一个数,肯定有至少一位的数字被改变。证毕。

SG函数

定义: s g ( u ) = m e x { s g ( v ) , v ∈ c h i l d ( u ) } sg(u)=mex\{sg(v),v\in child(u)\} sg(u)=mex{sg(v),vchild(u)}
终节点为sg=0。
s g ( x ) = 0 sg(x)=0 sg(x)=0的节点是必败态,否则是必胜态。
证明很直观,考虑 m e x mex mex的定义,即必败态只能走向必胜态,必胜态可以走向必败态。
求解复杂度: n m nm nm。(n为石子数量,m为一次最多可拿的石子数(即转移方式数量))

看到这里你已经具备了所有前置知识,接下来就肝题吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值