博弈论--组合博弈的 SG 函数求解

本文介绍了如何利用SG函数解决组合博弈问题,包括DAG图的ICG(公平组合游戏),SG函数的定义及其性质,以及如何通过SG函数求解不同类型的博弈策略。通过将复杂游戏分解为简单子游戏,计算各子游戏的SG值并进行异或操作,可以确定原游戏的必胜策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.组合博弈问题

前面的文章里我们仔细研究了 Nim 游戏,并且了解了找出必胜策略的方法。
但如果把 Nim 的规则略加改变,你还能很快找出必胜策略吗?比如说:有 n 堆
石子,每次可以从第 1 堆石子里取 1 颗、2 颗或 3 颗,可以从第 2 堆石子里取奇
数颗,可以从第 3 堆及以后石子里取任意颗……这时看上去问题复杂了很多,但
相信你如果掌握了本节的内容,类似的千变万化的问题都是不成问题的。

2.DAG 图的 ICG(公平组合游戏)

给定一个有向无环图和 一个起始顶点上的一枚棋子,两名选手交替的将这
枚棋子沿有向边进行移动,无法移动者判负。事实上,这个游戏可以认为是所有
Impartial Combinatorial Games(公平组合游戏)的抽象模型。也就是说,任
何一个 ICG 都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一
条有向边来抽象成这个“有向图游戏”。

3.SG 函数的定义

下面我们就在有向无环图的顶点上定义 Sprague-Garundy(貌似是两个人
名)函数。首先定义 mex(minimal excludant)运算,这是施加于一个集合的运
算,表示最小的不属于这个集合的非负整数。例如 mex{0,1,2,4}=3、
mex{2,3,5}=0、mex{}=0。

SG 函数要怎么定义?我们希望 SG 函数能够反映这样的规律:
① 如果把必败态记为 0,则凡是能够转移到 0 的状态,都是必胜态,不妨
用非 0 记录之,也就是说某个点有一个后继的 SG 为 0,则该点的 SG 值就非 0。
② 凡是只能转移到必胜态的状态,都是必败态。沿用前面的假设,必胜态
非 0,所以某个点的所有后继的 SG 值都是非 0,那么这个点的 SG 值就是 0。)
对于一个给定的有向无环图,定义关于图的每个顶点的 Sprague-Grundy 函
数 g 如下:g(x)=mex{ g(y) | y 是 x 的后继 }。(如果后继中出现 g(y)=0,那
么 g(x)!=0;如果所有后继的 SG 值都不为 0,那么 g(x)=0。也就是说,g(x)=0
时下一步一定是 g(x)!=0,而 g(x)!=0 时一定可以通过一步到达 g(x)=0。所以
如果 g(x)=0 对应的是必败态,那么任何拿到 g(x)!=0 的人,都希望变成 g(x)=0
交给对手,对手交回给自己的只能是 g(x)!=0,这样可以保证自己立于不败之
地。

来看一下 SG 函数的性质。
首先,所有的 terminal position 所对应的顶点,也就是没有出边的顶点,其 SG 值为 0,因为它的后继集合是空集.

然后对于一个 g(x)=0 的顶点 x,它的所有前驱 y 都满足 g(y)!=0

对于一个 g(x)!=0 的顶点,必定存在一个后继 y 满足 g(y)=0。
以上这三句话表明,顶点 x 所代表的 position 是 P-position(必败态)当
且仅当 g(x)=0(跟 P-positioin/N-position 的定义与那三句话是完全对应的)。
我们通过计算有向无环图的每个顶点的 SG 值,就可以对每种局面找到必胜策略了。但 SG 函数的用途远没有这样简单。如果将有向图游戏变复杂一点,比如说,有向图上并不是只有一枚棋子,而是有 n 枚棋子,每次可以任选一颗进行移动,这时,怎样找到必胜策略呢?让我们再来考虑一下顶点的 SG 值的意义。当 g(x)=k 时,表明对于任意一个0<=i<k,都存在 x 的一个后继 y 满足 g(y)=i。也就是说,当某枚棋子的 SG 值是k 时,我们可以把它变成 0、变成 1、……、变成 k-1,但绝对不能保持 k 不变。
(虽然有点绕,但仔细阅读后还是读懂了。)不知道你能不能根据这个联想到Nim 游戏.
Nim 游戏的规则就是:每次选择一堆数量为 k 的石子,可以把它变成0、变成 1、……、变成 k-1,但绝对不能保持 k 不变。这表明,如果将 n 枚棋子所在的顶点的 SG 值看作 n 堆相应数量的石子,那么这个 Nim 游戏的每个必胜策略都对应于原来这 n 枚棋子的必胜策略!

对于 n 个棋子,设它们对应的顶点的 SG 值分别为(a1,a2,…,an),再设局面(a1,a2,…,an)时的 Nim 游戏的一种必胜策略是把 ai 变成 k,那么原游戏的一种必胜策略就是把第 i 枚棋子移动到一个 SG 值为 k 的顶点。这听上去有点过于神奇——怎么绕了一圈又回到 Nim 游戏上了。其实我们还是只要证明这种多棋子的有向图游戏的局面是 P-position 当且仅当所有棋子所在的位置的 SG 函数的异或为 0。这个证明与上节的 Bouton’sTheorem 几乎是完全相同的,只需要适当的改几个名词就行了。

刚才,我为了使问题看上去更容易一些,认为 n 枚棋子是在一个有向图上移动。但如果不是在一个有向图上,而是每个棋子在一个有向图上,每次可以任选一个棋子(也就是任选一个有向图)进行移动,这样也不会给结论带来任何变化。所以我们可以定义有向图游戏的和(Sum of Graph Games):设 G1、G2、……、Gn 是 n 个有向图游戏,定义游戏 G 是 G1、G2、……、Gn 的和(Sum),游戏 G 的
移动规则是:任选一个子游戏 Gi 并移动上面的棋子。Sprague-Grundy Theorem就是:g(G)=g(G1)g(G2)…^g(Gn)。也就是说,游戏的和的 SG 函数值是它的所有子游戏的 SG 函数值的异或。
再考虑在本文一开头的一句话:任何一个 ICG 都可以抽象成一个有向图游戏。所以“SG 函数”和“游戏的和”的概念就不是局限于有向图游戏。我们给每个 ICG 的每个 position 定义 SG 值,也可以定义 n 个 ICG 的和。所以说当我们面对由 n 个游戏组合成的一个游戏时,只需对于每个游戏找出求它的每个局面的SG 值的方法,就可以把这些 SG 值全部看成 Nim 的石子堆,然后依照找 Nim 的必胜策略的方法来找这个游戏的必胜策略了!

4.组合博弈问题的 SG 函数求解

回到本文开头的问题。有 n 堆石子,每次可以从第 1 堆石子里取 1 颗、2 颗
或 3 颗,可以从第 2 堆石子里取奇数颗,可以从 第 3 堆及以后石子里取任意
颗…… 我们可以把它看作 3 个子游戏,第 1 个子游戏只有一堆石子,每次可以
取 1、2、3 颗,很容易看出 x 颗石子的局面的 SG 值是 x%4。第 2 个子游戏也是
只有一堆石子,每次可以取奇数颗,经过简单的画图可以知道这个游戏有 x 颗石
子时的 SG 值是 x%2。第 3 个游戏有 n-2 堆石子,就是一个 Nim 游戏。对于原游
戏的每个局面,把三个子游戏的 SG 值异或一下就得到了整个游戏的 SG 值,然后
就可以根据这个 SG 值判断是否有必胜策略以及做出决策了。其实看作 3 个子游
戏还是保守了些,干脆看作 n 个子游戏,其中第 1、2 个子游戏如上所述,第 3
个及以后的子游戏都是“1 堆石子,每次取几颗都可以”,称为“任取石子游
戏”,这个超简单的游戏有 x 颗石子的 SG 值显然就是 x。其实,n 堆石子的 Nim
游戏本身不就是 n 个“任取石子游戏”的和吗?

5.小结

所以,对于我们来说,SG 函数与“游戏的和”的概念不是让我们去组合、制造稀奇古怪的游戏,而是把遇到的看上去有些复杂的游戏试图分成若干个子游戏,对于每个比原游戏简化很多的子游戏找出它的 SG 函数,然后全部异或起来就得到了原游戏的 SG 函数,就可以解决原游戏了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值