博弈论学习笔记

一、NIM取石子游戏

有n堆石子,分别有a1,a2,,an个,现在有两名选手分别从一堆取走若干个,可以证明对于任何一个确定的状态,(如果双方都采取最优策略)。

结论:一个状态是必败态当且仅当 {ai}=0。用归纳法证明,我们观察ai的二进制位。其中Xor中最高位的1,则必然存在一个ak使得这一位位1。我们将这一位取0,后面逐位配凑使得Xor变为0,这个新的ak<ak是显然的。我们在第k组取 akak 个即可将一个异或和不为0的序列变为0。

Xor : ...1.........
a_1 : .........1...
...
a_k : ...1.........
...
a_n : ........1....

二、有向图游戏

在一个有向无环图有一个棋子,两个玩家分别使棋子沿有向边移动一格,无法移动者输。

一些显然的结论,一个节点为必胜当且仅当后继中有一个必败态,一个节点为必败态当且仅当后继都是必胜态。我们用一个dp就可以处理出每个节点的状态。

但如果多个棋子呢?我们需要扩充一个节点储存的信息。

三、SG函数和SG定理

在有向无环图的节点v上定义SG(v)=mex{SG(u)|vu},其中mex A是一个集函数,表示NA中的最小数。不难发现节点为为必败当且仅当SG为1。一个重要的定理说明了SG值和多棋子有向图游戏的关系:

SG定理:定义N个组合游戏A1,A2,,AN,他们的和为:每一步任选一个游戏做一次移动组成的游戏。

SG(Ai)=SG(A1)SG(A2)...SG(AN)

四、应用

模型构建的关键:正确地选取研究对象

例一

给定n个框,从左到右排列,每个框内初始可能有一些球。两位玩家轮流操作,每次操作可以选择一个框,然后把一个求丢到其左边的一个框内(如果左边没框则不能这么操作)。

求先手必胜/后手必胜的充要条件?

思路与解: 将每一个球当作一个研究对象,将坐标看成“堆的大小”,则问题转化为NIM。

例二

有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件。谁没有石子可移时输掉游戏。问先手是否必胜。

思路与解: 由于涉及相对,考虑用差分。差分转化为一个问题:只能向右边移动若干个石子。于是转化为一个“阶梯博弈问题”,考虑一个N级阶梯,每级上有若干石子,选手分别从每个位置向下一级阶梯移动若干石子。这一题的关键结论为:偶数级上的石子与胜负态无关(可以用归纳法证明)。那么成为了奇数级的NIM游戏。

例三

给定n堆石子,其中第i堆的石子数目为a[i]。两人轮流操作,每次操作可以选择一堆,取走x个石子,其中x必须是集合B中的数,不能操作者判负。问是否有先手必胜策略。

思路与解: 不同堆之间独立,暴力构造有向图SG,再异或起来。

例四

给定一张100*100的棋盘,在上面有一些“皇后”(可能有多个皇后在同一位置),两人轮流操作,每次操作可以选择一个皇后进行移动,但不能使其横或纵坐标变大,也不能原地不动。先将任意一个皇后移动至(0,0)者判胜。求先手是否有必胜策略。

思路与解: 考虑转化为我们熟悉的“不能动作者负”。不能到第一列,最后一行和副对角线。然后暴力构造SG再异或。

posted @ 2017-02-28 23:47  ljt12138  阅读(208)  评论(0编辑  收藏  举报