组合游戏略述 (一)
这个世界上的游戏太多了。游戏规则千变万化,游戏形式多种多样。这点我们从电脑上的游戏中便可以看出来。
在研究中,研究人员往往属于一些游戏人生的人。我们的人生又何尝不是一场游戏呢?它有自己的规则,只不过没有规定胜利和失败而已。
博弈论便是游戏体系的一个重要部分。在竞争中,如何在特定的规则下取得胜利,已经取得了无数的研究成果。
本文接下来先讨论一类游戏,你会发现这类游戏的结果都是确定的,也就是说如果玩家都采用最佳策略的话,游戏开始前就可以确定是谁赢了。这其中甚至包括著名的象棋和围棋(可惜我还不知道是谁赢,不过五子棋似乎已经确定先下的可以取胜了)。
这类游戏的共同特点如下:
多个选手轮流操作
从游戏开始到结束,每一个选手都知道游戏全部的规则(可以进行哪些操作,怎样算赢,怎样算输),并且知道游戏全部的信息(比如国际象棋中你随时都知道棋子的分布以及双方可以怎么走棋,而打桥牌的时候就不可以)。
为了方便讨论,我们以后的游戏都是2名选手。其中先走的称为先手,另一人称为后手。(下文出现的游戏都属于这类游戏,读者可以自行验证)
游戏1.有20个石子,两人轮流取,每人每次不得超过5颗,不得少于1颗。谁不能取就算输。
我们分析下这个简单的游戏。容易验证满足前文的规定。那么是先手胜利还是后手胜利呢?
答案:先手胜利。方法是先手先取2颗石子。这时剩下18颗为6的倍数。以后不管后手怎么取(设取x颗),A只需取6 - x,可以得出,最后一定是先手取走最后一颗石子。
游戏十分简单,我们从其中需要引出几个新的概念,再用这个新的概念去理解这个游戏。
必胜态和必败态:如果从当前的局面出发,最终将是这一局先走的人必胜,就称为必胜态,如果是这一局先走的人必败,则称为必败态。有的游戏存在和棋,可以用类似的方法增加和态。
使用必胜态与必败态的条件:两个玩家是公平的,根据游戏规则:同一个状态下,不管具体是谁先走,都会得到同样的结果。
这个条件可以这样理解。回到上面那个游戏中:假如我先手取4颗石子变成16颗,这时的局面是有16颗棋子轮到后手,还有可能先手取2颗,后手又取2颗,这时局面是16颗棋子轮到先手。除了选手外,别的都是一样的。那么如果第一场后手可以取胜,第二场就会使先手取胜。所以这个游戏可以使用必胜态与必败态分析。
下面用必胜态与必败态分析游戏1
显然剩0颗就败了,所以0是必败态。
1~5颗就是明显的必胜态了(以走到0)
6是必败(不管取几颗,下一个人都是必胜态了)
7~11是必胜(可以让下一个人遇到6)
依次往下... 可以得出凡是6的倍数为必败,其余必胜。20 % 6 = 2,所以是必胜态,所以先手必胜。
这个游戏简单推广一下。假设n颗棋子,每次不超过m颗。若n % (m+1) = 0 则先手必败。
从以上的讨论中,我们可以整理出利用必胜态与必败态分析问题的方法与特点:
(1).从结果向开始局面构造。(能让下家必败的是必胜态,否则是必败态)
(2).必败态往往比较少,可以从必败态中分析出一些规律
下面看一个较复杂,需要分析的游戏。
游戏2.有N颗石子,甲乙两人轮流取石子。第一次可以取任意多个(但不能取完),以后每人所取不得超过上一个人所取的一半。胜负规则同游戏1。判断N=13,30,543,...等时候先手必胜还是必败。
这个游戏有的局面需要有两个参数n , m 来表示,其中n表示剩余石子数,m表示这一局可以取的石子数。初始局面为m = n-1。
得到如下结果(括号内为m)
n = 0 必败
n = 1 必胜
n = 2 (1败,2胜)
n = 3 (1败,2败,3胜)
n = 4 (1胜,2胜,3胜,4胜)
n = 5 (1败,2败,3败,4败,5胜)
n = 6 ...
这样下去,将(n,n-1)为必败态的项整理出来。便是如下数列:
2 3 5 8 13 ...
我们由此可以推知必败态的规律:这里就不具体解释了。上面几个N对应的情况也就很清楚了。
上面用必胜态与必败态讨论了2个游戏。以下看一个经典的游戏:
游戏3.(Nim-Game)甲乙两人从N堆石子中取石子,每堆石子个数分别为ai。每人每次从一堆中至少取一个。胜负规则依然如游戏1。问什么情况下必胜,什么情况下必败。
这里给出结论:当且仅当a1 xor a2 xor a3 xor ... xor an = 0 时,局面为必败态。暂不讨论如何得到的。
那么,如果限制每人每次取是还不得超过M个石子,结果会怎样?
如果规定每人不是从一堆取:而是不超过M堆,结论又是如何呢?
这就要考虑多个游戏的合成了,下回再讨论吧。
在游戏2中
n = 0 必败
n = 1 必胜
n = 2 (1败,2胜)
n = 3 (1败,2败,3胜)
n = 4 (1胜,2胜,3胜,4胜)
n = 5 (1败,2败,3败,4败,5胜)
n = 6 ...
为什么,n=3,m=1为败啊?怎么想都觉得是胜?
可以给我一个邮箱么?我正在解决一个如下的问题:
甲乙两人从N堆石子中取石子,每堆石子个数分别为ai。
总石子数<=16
每人每次从一堆中最少取1个,最多取3个。
取最后一粒的为输家