博弈论总结

前言

本篇为博弈论总结,文章会按题目类型分类。

基础铺垫——必胜点和必败点的介绍

P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。
N点:必胜点,处于此情况下,双方操作均正确的情况下必胜。
必胜点和必败点的性质:
1、所有终结点是 必败点 P 。(我们以此为基本前提进行推理,换句话说,我们以此为假设)
2、从任何必胜点N 操作,至少有一种方式可以进入必败点 P。
3、无论如何操作,必败点P 都只能进入 必胜点 N。
我们研究必胜点和必败点的目的是为题进行简化,有助于我们的分析。通常我们分析必胜点和必败点都是以终结点进行逆序分析。

思路清晰的题目

分析决策前后的不变量

(一)考虑奇偶性的变化

(二)考虑总量的不变性

对称构造

从特殊情况入手

(一)从最简单的必胜态入手

(二)从最简单的必败态入手

(三)从固定参数的情况进行讨论

(四)分析参数之间的大小关系

博弈树

(一)博弈树基础

(二)简单优化

(三)极大极小搜索和alpha-beta剪枝

经典博弈问题及其拓展问题

(一)巴什博奕

普通巴什博奕

1.问题模型:
只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜(谁拿了最后一个谁赢)。

2.解决:
当n=m+1时,由于一次最多只能取m个,所以无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜,所以当一方面对的局势是n%(m+1)=0时,其面临的是必败的局势

当n=(m+1)*r+s时,(r为任意自然数,0 < s ≤ m)时,只要先取者要拿走s个物品,局面便变成了n%(m+1)=0的必败局面,所以先取者必胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

3.变形:条件不变,改为最后取光的人输。
结论:当(n-1)%(m+1)==0时后手胜利。

巴什博奕的扩展——k倍动态减法游戏

1.问题模型:
有一个整数S(>=2),先行者在S上减掉一个数x,至少是1,但小于S。之后双方轮流把S减掉一个正整数,但都不能超过先前一回合对方减掉的数的k倍,减到0的一方获胜。

2.解决:
法一:曹钦翔的《从“k倍动态减法游戏”出发探究一类组合游戏问题》中提到了动态规划的优化算法
咕咕咕。。。

法二:纯数学方法
k=1的时候
必败态是2 ^ i, 因为我们把数按二进制分解后,拿掉二进制的最后一个1,那么对方必然不能拿走倒数第二位的1,因为他不能拿的比你多。你只要按照这个策略对方一直都不可能拿完,而且一定会生成新的低位的1。所以你就会赢。而当分解的二进制中只有一个1时,因为第一次先手不能全部取完,所以后手一定有办法取到最后一个1,所以必败!

k=2的时候
即为斐波那契博弈必败态是斐波那契数列,这里用到一个斐波那契数列的性质,即任何数都可以表示成若干个“互不相邻的”斐波那契数的和,而不相邻的斐波那契数所差的倍数都是大于2的,那么我们就可以类比K=1的情况,把N按这种“斐波那契数列”的数制分解,每次仍然是取走最低位的1,由于后手无法取走高两位之上的1而前边的不相邻有保证了不会有连续的1出现,所以接下来就和K=1的时候一样了,每次取走最低位的1直到结束。

k>2的时候
犹如Fibonacci博弈,我们首先要求一个数列,将n分解成数列中一些项的和,然后就可以按Fibonacci博弈的解决方法来完成,也可以按二进制的方法来理解,每次取掉最后一个1 还是符合上面的条件。

我们用a数组表示要被求的数列,b数组中的b[i]保存 a[0…i] 组合能够构造的最大数字。这儿有点难理解,所谓构造就是指n分解为Fib数相加的逆过程。举例说明,当k = 2 时,a[N]={1, 2, 3, 5, 8, 13, 21, 33…} (Fibonacci数组);那么b[3] 即 1、2、 3 能够构造的最大数字,答案是4,有点匪夷所思?或许你会问为什么不是5、6或者其它的什么,其实是这样的 ,4 能分解成 1+3 是没有争议的,但5能分解成2+3吗? 不能,因为5本身也是Fibonacci数;6虽然能分解,但不是分解成1+2+3,而是分解成1+5。

经过上述,我们知道b[i] 是 a[0…i] 能够构造出的最大数字,那么a[i +1] = b[i]+1;因为a数组(Fib数组)所存的数字都是不可构造的(取到它本身就是必败态),显然a[0…i]构造的最大数字 + 1 即为下一个不可构造的数字了(a[i + 1])。

然后关于b[i]的计算,既然是a[0…i]构造最大数字,那么 a[i]是一定要选用的(这儿需要一定的推理,a[i]构造数字时,相邻的j个是不能同时用的,就像上述的2、3不能构造出5一样,推理请自己完成),那么要选用的下一项只能递减寻找,直到找到 a[t] 满足 a[t] * K < a[i] ,而b[t]就是a[0…t]所能构造的最大数字,再加上a[i], 即为a[0…i]能构造的最大数字,于是b[i] = b[t] + a[i]。

求得数列后,之后的工作就简单了,跟Fibonacci博弈一样一样的,如果n=数列中的数,则必败,否则必胜;必胜时还要求输出第一步取法,按照上文的理解,将n分解之后,选择最小的一个a[i]即可(类似选择二进制的最小的1)。

(二)威佐夫博弈

1.问题模型:
有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

2.解决:
( a k , b k ) (a_k,b_k) (ak,bk) ( a k ≤ b k , k = 0 , 1 , 2 , … , n ) (a_k ≤ b_k,k=0,1,2,…,n) (akbk,k=0,1,2,,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。

如何找出所有的奇异局势?
下面证明,根据下面的方法,可以构造出所有的必败态
a. (0,0)是必败态。
b.第k个必败态的两个数相差为k(记(0,0)为第0个必败态)。
c. 已知前k个必败态,则最小的没出现过的正整数为第k+1个必败态的第一个数。
由构造方法,可以推出奇异局势的下述三条性质
a.任何自然数都包含在一个且仅有一个奇异局势中。
由于 a k a_k ak是未在前面出现过的最小自然数,所以有 a k > a k − 1 a_k > a_{k-1} ak>ak1 ,而 b k = a k + k > a k − 1 + k − 1 = b k − 1 > a k − 1 b_k= a_k + k > a_{k-1} + k-1 = b_{k-1} > a_{k-1} bk=ak+k>ak1+k1=bk1>ak1 。所以性质a成立。
b.任意操作都会将奇异局势变为非奇异局势。
事实上,若只改变奇异局势 ( a k , b k ) (a_k,b_k) (ak,bk)的某一个分量,那么另一个分量不可能在其他奇异局势中,所以必然是非奇异局势。如果使 ( a k , b k ) (a_k,b_k) (ak,bk)的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差,因此也是非奇异局势。
c.采用适当的方法,可以将非奇异局势变为奇异局势。

1.若a=b,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0)
2.若a!=b,不妨设a<b
(1)若 a = a k 且 b < b k a=a_k且b<b_k a=akb<bk:同时从两堆中取走 a k − a b − a k a_k-a_{b-a_k} akabak个物体,就变为了奇异局势 ( a b − a k , a b − a k + b − a k ) (a_{b-a_k},a_{b-a_k}+b-a_k) (abak,abak+bak)
(2)若 a = a k 且 b > b k a=a_k且b>b_k a=akb>bk:从b堆中取走 b − b k b-b_k bbk个物品,就变为了奇异局势 ( a k , b k ) (a_k,b_k) (ak,bk)

求奇异局势的公式 a k = ⌊ k ( 1 + 5 ) 2 ⌋ , b k = a k + k a_k=\left\lfloor\dfrac{k(1+\sqrt5)}{2}\right\rfloor,b_k= a_k+k ak=2k(1+5 ),bk=ak+k ( k = 0 , 1 , 2 , . . . , n ) (k=0,1,2,...,n) (k=0,1,2,...,n)

结论:
( i n t ) ( ( b k − a k ) ∗ ( 1 + 5 ) / 2 ) ! = a k (int)((b_k-a_k) * (1+\sqrt5)/2) != a_k (int)((bkak)1+5 /2)!=ak,先手必赢
( i n t ) ( ( b k − a k ) ∗ ( 1 + 5 ) / 2 ) = = a k (int)((b_k-a_k) * (1+\sqrt5)/2) == ak (int)((bkak)1+5 /2)==ak,后手必赢

(三)尼姆博奕

普通尼姆博弈

1.问题模型:
有n堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

2.解决:
结论:记各堆物品个数分别为 a 1 , a 2 , a 3 , . . . , a n a_1,a_2,a_3,...,a_n a1,a2,a3,...,an
a 1   x o r   a 2   x o r   a 3 . . . x o r   a n ! = 0 a_1\space xor\space a_2\space xor \space a_3...xor\space a_n != 0 a1 xor a2 xor a3...xor an!=0,先手必胜
a 1   x o r   a 2   x o r   a 3 . . . x o r   a n = = 0 a_1\space xor\space a_2\space xor \space a_3...xor\space a_n == 0 a1 xor a2 xor a3...xor an==0,先手必败

尼姆博弈的拓展

扩展形式1:限定每次取物上限

1.问题模型:
有n堆物品,其中第i堆有 p i p_i pi个物品,两人轮流从某一堆取走一些物品,每次最多取走m个物品,谁不能继续取谁就输了。

2.解决:
结论令S为 p i p_i pi对m+1取模后异或和的结果,若S=0则为P局面,否则为N局面。

证明:将 p i p_i pi分解为 r i r_i ri k i k_i ki,其中 k i k_i ki为(m+1)的倍数。如果对手在 r i r_i ri内取物,则按照Nim游戏的走法,若不然,假设A取x个,那么B就取(m+1-x)个,使得游戏保持原有必胜态或必败态。

拓展形式2:每次允许从k堆中取物(Nimk问题)

1.问题模型:
有n堆物品,其中第i堆有 p i p_i pi个物品,两人轮流从k堆中选若干物品取走,谁不能继续取谁就输了。

2.解决:
结论我们把 p i p_i pi这n个数转成二进制,然后每位分别相加,每位和%(k+1)即可。如果每一位结果都是0,则为P局面,否则为N局面。

扩展形式3:规定取物方向(阶梯Nim)

1.问题模型:
有 n堆石子,每堆石子的数量为 x 1 , x 2 , . . . , x n x_{1},x_{2},...,x_{n} x1,x2,...,xn。A,B轮流操作,每次可以选第 k 堆中的任意多个石子放到第 k-1 堆中,第 1堆中的石子可以放到第 0堆中,最后无法操作的人为输。

2.解决:
结论先手必败当且仅当奇数阶梯上的石子数异或和为 0

拓展形式4:不能继续取者赢(Anti-Nim)

1.问题模型:
有n堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得输。

2.解决:
结论
1.每一堆石子只有一个 且 异或和为0
2.存在至少一堆石子多于一个 且 异或和不为0
满足上述任意一个条件,先手必胜

公平组合博弈(ICG)

1.定义:
(1)两人参与。
(2)游戏局面的状态集合是有限。
(3)对于同一个局面,两个游戏者的可操作集合完全相同
(4)游戏者轮流进行游戏。
(5)当无法进行操作时游戏结束,此时不能进行操作的一方算输。
(6)无论游戏如何进行,总可以在有限步数之内结束。

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

SG函数与SG定理

1.SG函数(Sprague-Grundy函数):

首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。

对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Garundy函数SG如下: S G ( x ) = m e x { S G ( y ) ∣ y 是 x 的 后 继 } SG(x)=mex\{ SG(y) | y是x的后继\} SG(x)=mex{SG(y)yx}

SG函数性质:
(1)所有的终结点所对应的顶点,其SG值为0,因为它的后继集合是空集——所有终结点是必败点(P点)。
(2)对于一个 S G ( x ) = 0 SG(x)=0 SG(x)=0的顶点x,它的所有后继y都满足 S G ( y ) ! = 0 SG(y)!=0 SG(y)!=0——无论如何操作,从必败点(P点)都只能进入必胜点(N点)
(3)对于一个 S G ( x ) ! = 0 SG(x)!=0 SG(x)!=0的顶点,必定存在一个后继点y满足 S G ( y ) = 0 SG(y)=0 SG(y)=0——从任何必胜点(N点)操作,至少有一种方法可以进入必败点(P点)

结论:
当SG[x] = 0时,x为必败态。
当SG[x] > 0时,x为必胜态。

SG函数的求法:

1)可选步数为1-m的连续整数,直接取模即可,SG(x) = x % (m+1)(eg.Bash game);2)可选步数为任意步,SG(x) = x(eg.Nim game);3)通法:用mex(计算每个节点的值)

2.SG定理(Sprague-Grundy定理):

游戏和的SG函数等于各个游戏SG函数的Nim和。 这样就可以将每一个子游戏分而治之,从而简化了问题。
而Bouton定理就是Sprague-Grundy定理在Nim游戏中的直接应用,因为单堆的Nim游戏 SG函数满足 S G ( x ) = x SG(x) = x SG(x)=x

三类特殊的SG游戏

Anti-SG游戏

1.定义:
Anti-SG游戏规定,决策集合为空的游戏者赢。其他规则与SG游戏相同。

2.SJ定理
对于任意一个Anti-SG游戏,如果我们规定当局面中所有的单一游戏的SG值为0时,游戏结束,则先手必胜当且仅当:
1)游戏的SG函数不为0 且 游戏中某个单一游戏的SG函数大于1。
2)游戏的SG函数为0 且 游戏中没有单一游戏的SG函数大于1。

注意:如果所有单一游戏SG值都为0,而游戏还未结束的话,SJ定理是不适用的。

Multi-SG游戏

1.定义:
Multi-SG游戏规定,在符合拓扑原则的前提下,一个单一游戏的后继可以为多个单一游戏,其他规则与SG游戏相同。

2.定理:Multi-SG游戏的仍然可以用SG函数来定义局面。

注意区分后继以及多个单一游戏
对于一个状态来讲
不同的划分方法会有多个不同的后继
而在一个后继当中会有多个独立的游戏
该后继状态SG值即为后继状态中独立游戏的异或和
该状态的SG值即为后继状态的mex

Every-SG游戏

1.定义:
Every-SG游戏规定,对于还没有结束的单一游戏,游戏者必须对该游戏进行一步决策,其他规则与SG游戏相同。

2.定理:
s t e p 函 数 step函数 step
在通过拓扑关系计算某一个状态点的SG函数时,对于SG值为0的点,我们需要知道最快几步能将游戏带入终止状态,对于SG值不为0的点,我们需要知道最慢几步游戏会被带入终止状态,我们用step函数表示这个值。

E v e r y − S G 定 理 Every-SG定理 EverySG
对于Every-SG游戏,先手必胜当且仅当单一游戏中最大的step为奇数。

经典的SG组合游戏

(1)“翻硬币”游戏

(2)图游戏模型

(3)无向图的删边游戏

(4)Shannon开关游戏

(5)其他题目

不平等的组合游戏

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值