公平合作博弈入门

博弈论简介

  博弈论,又称为对策论(Game Theory)、赛局理论等,既是现代数学的一个新分支,也是运筹学的一个重要学科。
  博弈论主要研究公式化了的激励结构间的相互作用,是研究具有斗争或竞争性质现象的数学理论和方法。 博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。生物学家使用博弈理论来理解和预测进化论的某些结果。
  博弈论已经成为经济学的标准分析工具之一。在金融学、证券学、生物学、经济学、国际关系、计算机科学、政治学、军事战略和其他很多学科都有广泛的应用。

巴什博弈

一个简单的游戏

  定义一个取石子的游戏规则如下:
  (1)有两个玩家,分别记作玩家 I 和玩家 II。
  (2)有21个石子放在桌子上。
  (3)每个玩家一次可以取走1或2或3个石子。
  (4)两个玩家交替进行取石子操作,由玩家 I 开始游戏。
  (5)取走最后一个石子的玩家获胜(如果玩家没有石子可取,他就输了)。
  玩家怎么做才能获胜?使用向后归纳法来分析玩家当前状态是输是赢。
  如果玩家面临0个石子,那么他就输了。
  如果玩家面临1、2、3个石子,那么他就赢了。
  如果玩家面临4个石子,那么他就输了(因为他一次取不完,而剩下的石子下一个玩家可以一次取完)。
  如果玩家面临5、6、7个石子,那么他就赢了(因为他可以留下4个石子,下一个玩家必输)。
  …

必胜点和必败点

  假如使用N来表示必胜点,P来表示必败点。有如下规定:
  (1)游戏的终结点使用P表示。
  (2)对于每一个N点,至少可以有一种操作可以进入P点。
  (3)对于每一个P点,每一种操作都只能进入N点。
  假如把上面取子的规则改成{1,3,4},会出现什么情况呢?
  image
  整个序列一直在重复PNPNNNN这个模式。如果有100个石子,当前位置是必胜还是必败?
  100 mod 7 = 2,整个模式只有 0 和 2 是必败点,所以100应该是一个必败点。

尼姆博弈

  假如把游戏规则改一下,现在有三堆石子,每次只能操作一堆石子,可以从中拿走任意数量。这个游戏该怎么确定胜败规律呢?

预备分析

  首先可以确定的就是(0, 0, 0)作为终结点标记为P,如果是只剩下一堆的情况(0, 0, x),x > 0,那么这是一个N点。如果剩下两堆,并且这两堆数目相同,很明显这是一个P点(比如(0, 1, 1)和(0, 2, 2),当前玩家从一堆中拿多少个,下一个玩家就从另一堆中拿多少个)。如果剩下数目不同的两堆,那么这是一个N点。
  如果三堆都还有石子呢?像(1, 1, 1)、(1, 1, 2)、(1, 1, 3)和(1, 2, 2)这些点明显是N点(它们可以被当前玩家操作成(0, 1,1)或者(0, 2, 2))。接下来看一下(1, 2, 3),这是一个P点,因为不管怎么操作它都会进入之前所发现的N点中。也许我们可以继续分析找出接下来的P点(1, 4, 5)、(2, 4, 6),但是这样分析下去是很困难的。
  如果继续分析下去,你们可能会发现这里也存在一种模式。

尼姆和

  我们知道所有的非负整数都可以表达为二进制。
  $x=x_m2^m+x_{m-1}2^{m-1}+…+x_12+x_0$
  我们可以使用$(x_mx_{m-1}…x_1x_0)_2$来表示一个非负整数的二进制形式,比如$22=(10110)_2$。
  定义:$(x_m…x_0)_2$和$(y_m…y_0)_2$的尼姆和可以写作$(x_m…x_0)_2⊕(y_m…y_0)_2=(z_m…z_0)_2$,对于所有的k,有$z_k=x_k+y_k (mod 2)$。
  比如求一下22和51的尼姆和:
  image
  ⊕就是我们熟知的异或运算,它满足以下规律:
  $x⊕(y⊕z)=(x⊕y)⊕z$
  $x⊕y=y⊕x$
  $0⊕x=x$
  $x⊕x=0$
  如果 $x⊕y=x⊕z$ ,就表示y=z。
  定理1:在尼姆游戏的规则下,如果$(x_1,x_2,x_3)$是一个P点,当且仅当$x_1⊕x_2⊕x_3=0$。(这个定理适用于多堆石子游戏,不仅仅只对3堆有效)
  证明:
  假设我们用集合X来表示尼姆和为0的点,集合Y表示其他的点。接下来我们检验一下必胜点和必败点的定义:
  (1)终结点都在集合X中,终结点的定义就是任何一堆都没有石子,那么$0⊕0⊕0…. = 0$。
  (2)对于所有集合Y中的点,都可以通过至少一种操作进入X。假设我们找到Y中一个点,按照二进制的形式纵向排列每一堆石子的个数(像尼姆和定义下面的举例一样),尼姆和不为0,一定是某些二进位上存在奇数个’1’,找到最左边出现奇数个’1’的一列,选取这一列有’1’的一堆进行操作,让每个二进制位的纵向排列都是偶数个’1’。
  (3)对于集合X中的点,每一个操作都会进入Y。如果$(x_1,x_2,…)$是集合X中的点,如果我们将$x_1$变成$x_1^{‘}<x_1$,那么我们不能证明,因为如果这个等式成立,就表示$x_1=x_1^{‘}$(不存在一个都不取得操作)。所以$x_1^{‘}⊕x_2…≠0$,这就表示$(x_1^{‘},x_2…)$不在集合X中。
  以上过程说明X中的点都是P点。
  证毕。

有向图博弈

  所有的取子游戏,其实都可以使用一个有向图来表示。而且接下来会讲到Sprague-Grundy函数(简称SG函数),这个函数可以理解为PN原理的升级版,而且函数的结果也不仅仅只包含P点和N点的信息。

有向图

  定义:一个有向图G,由一对(X, F)组成,X是一个非空点(位置)集合,F是一个函数,x 是X的元素,F(x)表示当前点 x 可能到达的后继点,F(x) ⊂ X。如果F(x)是空集,那么 x 就是终结点。
  举个例子,本文第一个取子游戏可表示为(X, F),X = {0, 1, … , n},F = {k-3, k-2, k-1}(小于0的元素忽略),对于x点可以到达的点有:F(0) = ∅,F(1) = {0},F(2) = {0, 1} … 。
  image

Sprague-Grundy函数

  有向图博弈可以通过PN原理来分析,而且也可以通过SG函数来分析。
  定义:一个有向图(X, F)的SG函数,在有向图定义的基础上,取值是非负整数有如下公式。
  $g(x)=min \{n≥0: n≠g(y) , y∈F(x)\}$
  换句话来说,g(x)是不在x的后继点的SG函数值中的非负整数。
  接下来分析本文第一个取子游戏的SG函数,终结点0,没有后继点,g(0) = 0;点1可以到达点0,g(1) = 1;点2可以到达点1、0,g(2) = 2;点3可以到达点2、1、0,g(3) = 3;点4可以到达点3、2、1,g(4) = 0。接着分析下去:
  image
  有没有发现SG函数与PN原理的相似之处?
  (1)终结点的g(x) = 0。
  (2)如果在点x处g(x) ≠ 0,那么x的后继点至少存在一个g(y) = 0。
  (3)如果在点x处g(x) = 0, 那么所有x的后继点,g(y) ≠ 0。
  注意:这里的有向图存在SG函数不允许图中存在有环的情况,而且途中所有路径必须是有限的(递进有限的有向图)。
  image

多个合作博弈组合

  如果把多个合作游戏放在一起,玩家轮流操作,每次只能在一个合作游戏中按规则操作一次,如何预测玩家的胜负呢?这里就需要用上面提到的SG函数来解决了。

合作博弈的和

  假设我们有n个递进有限的有向图$G_1=(X_1,F_1),G_2=(X_2,F_2),…,G_n=(X_n,F_n)$,它们可以组合成一个新的有向图$G=(X,F)$,它叫作$G_1,G_2,…G_n$的和,记作$G=G_1+G_2…+G_n$。集合 X 是一个笛卡尔积,$X=X_1×X_2…×X_n$,其中的元素是n个点的元组$(x_1,x_2,…,x_n)$,对于所有的$x_i∈X_i$,元素$x=(x_1,x_2,…,x_n)∈X$。F(x)存在如下等式:
  image
  对于点中$x=(x_1,x_2,…,x_n)$,任意一个点$x_i$都可以找到它的后继点集合$F_i(x_i)$,并且x的后继点都可以在上图函数F中找到,所以 G 是有向图$G_1,…G_n$的和。
  如果$G_i$是递进有限的,那么 G 也是递进有限的。因为点$x=(x_1,x_2,…,x_n)$的后继点的个数是所有组合有向图$x_i$的后继点个数的和。
  尼姆博弈就可以看做三个巴什博弈的和,虽然一堆石子玩起来很简单,但是多个博弈组合起来玩也许就会很复杂了。

Sprague-Grundy定理

  显然这个定理一定包含了SG函数,还会用到尼姆和。而且这个定理也可以起到PN原理的作用(判断当前点的胜败情况),证明过程与定理1类似。
  定理2:如果$g_i$表示递进有限的有向图$G_i$的SG函数,i = 1, … , n,那么$G=G_1+G_2…+G_n$存在SG函数$g(x_1,…,x_n)=g_1(x_1)⊕g_2(x_2)…⊕g_2(x_n)$。
  证明:
  假设$x=(x_1,x_2,…,x_n)$是集合X中的一点,那么存在$b=g(x_1)⊕…⊕g(x_n)$。
  那么证明以下两点 g 满足SG函数的定义:
  (1)对于每一个非负整数 a < b, 存在 x 的后继点 y,g(y) = a。
  (2)在 x 的所有后继点中,不存在 g(y) = b。
  为了证明(1),假设 d = a ⊕ b,在二进制展开d中找到最左边出现‘1’的二进位k(从右向左数),因为b > a,所以 b 在第 k 位一定是’1’,又因为$b=g(x_1)⊕…⊕g(x_n)$,那么一定存在一个$g_i(x_i)$使得 b 在第 k 位是奇数个’1’,假设i = 1,那么$d⊕g_1(x_1) < g_1(x_1)$,所以存在一种操作$g_1(x_1^{‘})=d⊕g_1(x_1)$,$(x_1,x_2,…,x_n)$可以通过符合规则的操作达到$(x_1^{‘},x_2,…,x_n)$。
    image
  最后证明(2)就比较简单了,假设$(x_1,x_2,…,x_n)$的后继点是$(x_1^{‘},x_2,…,x_n)$,如果$g_1(x_1)⊕g_2(x_2)…⊕g_n(x_n)=g_1(x_1^{‘})⊕g_2(x_2)…⊕g_n(x_n)$,那么$g_1(x_1)=g_1(x_1^{‘})$,因为$x_1^{‘}$是$x_1$的后继点,根据SG函数的定义显然$g_1(x_1)≠g_1(x_1^{‘})$。
  证毕。
  现在我们可以利用SG定理来分析多个合作博弈组合的胜负规律了。

参考文档

《GAME THEORY》 by Thomas S. Ferguson