巴什博奕(Bash Game)
给定 个物品。两名玩家轮流行动,取走任意 ~ 个物品。取走最后一件物品者获胜。两人都采取最优策略,问先手能否必胜。
结论:若 ,则先手必败,否则先手必胜
当石子有 ~ 个时,先手必胜
当石子有 个时,先手无论拿几个,后手都可以拿干净,先手必败
当石子有 ~ 时,先手可以拿走几个,剩下 个,先手必胜
不难发现,面临 个石子的人一定失败
这样的话两个人的最优策略一定是通过拿走石子,使得对方拿石子时还有 个
考虑往一般情况推广
-
设当前的石子数为
先手会首先拿走 个,接下来假设后手拿走 个,先手会拿走 个,这样博弈下去后手最终一定失败
-
设当前的石子数为
假设先手拿 个,后手一定会拿 个,这样下去先手一定失败
Nim游戏
给定 堆物品,第 堆物品有 个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者获胜。两人都采取最优策略,问先手能否必胜。
结论:若 堆石子的数量异或和非 时,则先手必胜,否则先手必败
Nim游戏的必败态我们是知道的,就是当前 堆石子的数量都为零
设 表示第 堆石子的数量,那么必败态局面就是
- 对于先手来说,如果当前局面是
那么一定存在某个 ,它的二进制表示在最高位 上一定是
我们将 ,这样就变成了
此时先手必胜
- 对于先手来说,如果当前局面是
那么我们不可能将某一个 异或一个非零数字后使得
此时先手必败
公平组合游戏ICG
- 由两名玩家交替行动。
- 在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关。
- 不能行动的玩家判负。
满足上述条件的问题我们称之为ICG
最典型的Nim游戏,就是一种ICG游戏
必胜态与必败态
定义P-position与N-position
P-position:必败态(简记为P),即Previous-position,你可以直观的认为处于这种状态的人最后一定会输
N-position:必胜态(简记为N),即Next-position,你可以直观的理解为处于这种状态的人最后一定会赢
这仅仅是最直观的定义
更严谨的定义为:
- 无法移动的状态(即terminal-position)为P
- 存在移动可以进入P的局面为N
- 所有移动都会进入N的局面为P
DAG博弈
给定一个有向无环图,图中有一个唯一的起点,在起点上放有一枚棋子。两名玩家交替地把这枚棋子沿有向边进行移动,每次可以移动 一步,无法移动者判负。该游戏被称为有向图游戏。
任何一个公平组合游戏都可以转化为有向图游戏。把每个局面看成图中的一个节点,并且从每个局面向沿着合法行动能够到达的下一个局面连有向边。
Mex运算
设 表示一个非负整数集合。定义 为求出不属于集合 的最小非负整数的运算,即:
SG函数
SG(Sprague-Grundy)函数是人们在研究博弈论的道路上迈出的重要一步,它把许多杂乱无章的博弈游戏通过某种规则结合在了一起,使得一类普遍的博弈问题得到了解决。从SG函数开始,我们不再是单纯的同过找规律等方法去解决博弈问题,而是需要学习一些博弈论中基本的定理,来找到他们的共同特点。
对于给定的有向无环图,定义每个点的SG函数为
flowchart LR 0["SG(0)=0"] 1["SG(1)=1"] 2["SG(2)=0"] 3["SG(3)=2"] 4["SG(4)=0"] 5["SG(5)=1"] 0--->1 1--->2 3--->1 3--->4 4--->5 5--->2
对应的局面为必败态
对应的局面为必胜态
// N:可转移状态的个数 f[N]:可转移状态的集合
// SG[]:SG(x) S[]={SG(y)|x to y}
int f[MAXN], SG[MAXN], S[MAXN];
void getSG(int n)
{
memset(SG, 0, sizeof(SG));
for (int i = 1; i <= n; i++)
{
memset(S, 0, sizeof(S));
for (int j = 0; f[j] <= i && j <= N; j++)
S[SG[i - f[j]]] = 1;
for (int j = 0;; j++)
if (!S[j])
{
SG[i] = j;
break;
}
}
}有向图游戏的和
设 是 个有向图游戏。定义有向图游戏 ,它的行动规则是任选某个有向图游戏 ,并在 上行动一步。 被称为有向图游戏 的和。
有向图游戏的和的SG函数值等于它包含的各个子游戏SG函数值的异或和,即:
SG函数的应用
Nim游戏
给定 堆物品,第 堆物品有 个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者获胜。两人都采取最优策略,问先手能否必胜。
对于第 堆物品,
故
Anti-SG游戏
Anti-Nim游戏
给定 堆物品,第 堆物品有 个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者失败。两人都采取最优策略,问先手能否必胜。