博弈论
公平组合游戏
公平组合游戏(Impartial Game)的定义如下:
- 游戏有两个人参与,二者轮流做出决策,双方均知道游戏的完整信息;
- 任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关;
- 游戏中的同一个状态不可能多次抵达,游戏以玩家无法行动为结束,且游戏一定会在有限步后以非平局结束。
经典Nim游戏
给定n堆石子,两名玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完但不能不拿),最后无法进行操作的人视为失败
问如果两个人都采用最优策略,先手是否必胜
直接记结论:
若有n堆石子,每堆石子中石子数量为a1, a2, a3, …, an,若(a1 ^ a2 ^ a3 ^… ^ an) 为0,那么先手必败,反之先手必胜。
台阶-Nim游戏
现在,有一个n级台阶的楼梯,每级台阶上都有若干个石子,其中第 i级台阶上有 a i a_i ai个石子(i >= 1)
两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)
已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。
结论:
奇数级台阶上的石子数异或起来不为零的话先手必胜,反之先手必败
简要证明:
若奇数级台阶上的石子异或起来不等于0,那么此时我们可以将其中一个奇数级台阶上的一些石子移动到下一级偶数级台阶上,使得奇数级台阶上的石子数异或起来等于0
若对手从偶数级台阶上取石子移动到奇数级台阶上,那么我们只要将对手移动的石子数继续往下移动到偶数级台阶上,即可让奇数级台阶上的石子不变
所以说只要先手面对的是奇数级台阶上石子数异或起来不为0的情况,那么先手按照上述操作一定能使得对手面对的是异或起来为0的情况,那么此时奇数级台阶上便可以形成一个经典Nim游戏,结论即证。
MEX运算
找到一个非负整数集合中第一个未出现的最小非负整数
SG函数
令有向无环图的所有没有出边的点为终点,令SG(终点)= 0 ,若其中一点x所能到达的点为{y1, y2, y3, …, yn},令SG(x) = MEX{SG(y1), SG(y2), SG(y3),…SG(yn)},那么此时在这个有向无环图上所有非零的状态都能到0,所有为0的状态都到不了0,终点没有出边,所以终点为必败态,因此由终点推出起点的状态为0那么先手必败,反之先手必胜
比赛中往往会有多个图,结论为所有起点状态异或起来为0则先手必败,反之先手必胜
集合-Nim游戏
给定n堆石子以及一个由k个不同正整数构成的数字集合S
现在有两位玩家轮流操作,每次操作可以从任意一堆石子中拿取石子,每次拿取的石子数量必须包含于集合 S
,最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。
解法
每一堆石子都会通过集合S来取得出下一个状态,因此每一堆石子都能形成一个有向无环图,用sg函数求解即可