组合游戏与博弈

【引言】

  分金币问题:有100个金币,两个人轮流从这堆金币中取金币,规定每次至少取1个,最多取5个。取完最后一枚金币的人获胜。假入你先手取金币,对方是足够聪明的,你能找到一种必胜的方法吗?

【问题分析】

  首先我们考虑到这样一个简单的事实,如果最后把6个金币留给对方去取,那么很显然,对方必败。再往前推进一步,如果把12枚金币留给对方去取,对方也必败。

  为什么呢?原因很简单,不论对方取几个,我都能够把金币取成6个,这样就回到上一个对方必败的局势了。

  那么我们可以更进一步地推出,如果把金币取成18个,24个,30个.......留个对方呢?我们都可以必胜。所以可以推出,如果一开始金币不是6的倍数,我们必然可以将其取成6的倍数,对方必败。

  反过来考虑,如果一开始金币就是6的倍数,我们先手又不得不取,那么不论我们取几个,对方一定会将其取成6的倍数,那么我们先手必败。至此可以得出这样一个结论:初始金币个数100不是(5+1)的倍数,先手必胜。

【问题推广】如果金币是N个,每次至多取M个,至少取一个,那么先手胜负情况如何?

结论:当 N %(M+1)= 0时,先手必败,否则,先手必胜。这样对于这个问题,我们就总结出了一般性规律,这个游戏很经典,我们称之为--巴什博弈。

【理论上升】我们已经总结出了巴什博弈的一般性规律,那么对于诸于此类的组合游戏,我们如何去用更抽象的工具去研究它呢?

引入P点和N点,

P点: 即必败点,某玩家位于此点,只要对方无失误,则必败;

N点: 即必胜点,某玩家位于此点,只要自己无失误,则必胜。

P/N点有如下性质:

(1)P点不能一步到达下一个P点,N点可以一步到达P点。这就是为什么面临P点必败,因为你只要到达了P点,再进行决策无法再使局面变为P点,这样的话必然把N点留给对方,对方面临N点,又能一步到达P点,又将P点(必败点)留给了你,这样下去你必败无疑。

(2)终结状态是P点。很好理解,当上一个人把所有金币取完了,那么这时的状态变成P点,你面临的是空空如也,是胜负已分的终结状态,所以终结状态是P点。

(3)决定先手是否必胜,只要看初始局势是P点还是N点。是P点,必败;是N点,必胜。

在引言的取金币问题中,当n = 19, m = 5时, P/N状态如下表。显然,初始状态,剩余19个,是N点,先手必胜。

【问题推广和变形】

一、巴什博弈

1、问题模型:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个,最后取光者得胜。

2、解决思路:当n=m+1时,由于一次最多只能取m个,所以无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜,所以当一方面对的局势是n%(m+1)=0时,其面临的是必败的局势。所以当n=(m+1)*r+s,(r为任意自然数,s≤m)时,如果先取者要拿走s个物品,如果后取者拿走x(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

3.一般性规律:当 N %(M+1)= 0时,先手必败,否则,先手必胜。

二、威佐夫博弈

1.问题模型:有两堆物品,数量分别为M,N,两个人轮流取物品,先取完所有物品的人获胜。取物品时有两种方法,一是可以从某一堆取若干物品(至少一个,多者不限),或者是从两堆中同时取相同数量的物品。

2.策略:首先我们考虑一下面临什么局势会输,也就是两堆物品数量分别是什么的时候会输,也就是什么是P点。

(1)显然(0,0)是P点。然后(1,2)是P点,为什么呢,因为有个2在,不论你在第一堆取还是第二堆取,剩下的人一定可以取完所有。进一步思考,当你面临(2,x),其中x>=2,你必胜,因为你要么一次性取完所有,要么把(1,2)留给对手,对手必败。所以除了(2,1),其他所有(2,x)都不是必败点。

(2)考虑(3,x)必败的情况,(3,1)(3,2)(3,3)显然都是必胜点。进一步推知(3,4)是必胜点。然后我们试试(3,5),发现它是必败点。你不论怎么取都会把之前我们已知的必胜点留给对方,所以你必败。x>5的情况呢,必然是必胜点,因为你可以把X取成5,把必败点(3,5)留给对方。这样我们可以得出结论(3,x)中除了(3,5)必败其余都是必胜。

(3)考虑(4,x)必败的情况,(4,1)(4,2)(4,3)(4,5),(4,6)显然都是必胜点。然而(4,7)却是必败点,你不论怎么取都会把之前我们已知的必胜点留给对方,所以你必败。

(4)这样我们已经知道的必败局势有(0,0)、(1,2)、(3,5)、(4,7),我们把这种局势称之为奇异局势。不难发现,如果记(ak, bk)为第k个奇异局势(第0个必败局势是(0,0)),那么ak是之前未出现过的最小数字,bk = ak + k;

3.一般性规律

那么第K项的(ak, bk)是什么呢?通项公式是:

具体证明见:https://baike.baidu.com/item/%E5%A8%81%E4%BD%90%E5%A4%AB%E5%8D%9A%E5%BC%88/19858256?fr=aladdin

4.注意事项。由于ak是整数,所以k一旦很大,比如10^100对根号5的精度要求极高,这时候调用库函数sqrt(double x)是得不到这么高的精度的,需要自己去实现一个实数开方的方法,返回一个高精度实数。

具体可以见我的另外一篇博客

三、尼姆博弈

1. 问题模型:有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,每次至少取一个,多者不限,最后取光者得胜。

2. 策略:

(1)首先我们分分析一下奇异局势。(0,0,0)是第一个奇异局势,然后可以证明(0,n,  n)是奇异局势,因为只要把这个局势留给对面,对面在一堆中取几个,那么我们都在另外一堆取相同数目的物品,到最后肯定胜利。

(2)如果面临的局势是(1,2,3),你可以发现这也是一个奇异局势,因为无论怎么取,对手必然可以将其变为(0,n,  n)的局势留给你。

如果面临(5,6,3),我们把它写成二进制阵列的形式:

1 0 1

1 1 0

0 1 1

可以发现,不论你取走哪一行的哪一个1,我都取走另外某一行的对应位的1,并且最后一定是我(后手)胜利。

进一步可以发现,这三个数的二进制阵列中,第1列到最后一列都有偶数个1,所以我们可以采取前面所说的策略,不论先手取走哪一行的哪一列的一个1,我都取走另外某一行的对应列的一个1。这样必然能够使得我取走该矩阵该列最后一个1,如果对于该矩阵每一列我能取走最后一个1,那么很显然,我必然是先取光所有物品的人。

由此我们可以发现:只要把这三个数写成二进制矩阵的形式,看看该矩阵是不是每一列的1的数目都是偶数,如果是,先手必败。

这样的矩阵有什么特点呢?那就是二进制的异或和为0.(每一列1的个数都是偶数嘛)。如果局势(x,y,z)是奇异局势,那么x xor y xor z = 0.

3. 推广到N堆,局势(X1, X2 , X3, X4, ......Xn)为奇异局势的充要条件是 X1 xor X2 xor  X3 xor  X4 xor  ......xor  Xn  =   0.

四、斐波那契博弈(引用自大佬博客

1、问题模型:

有一堆个数为n的石子,游戏双方轮流取石子,满足:

(1)先手不能在第一次把所有的石子取完;

(2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。 约定取走最后一个石子的人为赢家。

2、策略:

当n为Fibonacci数时,先手必败。即存在先手的必败态当且仅当石头个数为Fibonacci数。

证明:根据“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。如n=83 = 55+21+5+2,我们看看这个分解有什么指导意义:假如先手取2颗,那么后手无法取5颗或更多,而5是一个Fibonacci数,那么一定是先手取走这5颗石子中的最后一颗,同理,接下去先手取走接下来的后21颗中的最后一颗,再取走后55颗中的最后一颗,那么先手赢。

反证:如果n是Fibonacci数,如n=89:记先手一开始所取的石子数为y

(1)若y>=34颗(也就是89的向前两项),那么一定后手赢,因为89-34=55=34+21<2*34。

(2)y<34时剩下的石子数x介于55到89之间,它一定不是一个Fibonacci数,把x分解成Fibonacci数:x=55+f[i]+…+f[j],若,如果f[j]<=2y,那么对B就是面临x局面的先手,所以根据之前的分析,后手只要先取f[j]个即可,以后再按之前的分析就可保证必胜。

五、公平组合游戏与SG函数(未完待续)

原文地址:https://www.cnblogs.com/czsharecode/p/9627401.html

时间: 2024-10-14 01:33:52

组合游戏与博弈的相关文章

组合游戏(博弈)

昨天看大白书翻到了组合游戏这章,看着发觉原来是博弈论的内容,于是便看下去了.真是不看不知道,一看才知道自己的水平有多弱,不过好在还是集中精神地看了大部分.从Nim游戏(n堆石子,每人每次可以从任意一堆中取至少1个.至多整堆的石子,不能取者为输)开始讲起,引入必胜态.必败态的概念—— 1. 一个状态是必败状态当且仅当它的所有后继都是必胜状态. 2. 一个状态是必胜状态当且仅当它至少有一个后继是必败状态. 这是刘汝佳大神说的,说得通俗一点就是,必败态的所有后继都是必胜态,必胜态只需有一个后继是必败态

博弈-组合游戏

组合游戏: 规则1:一个状态是必败的状态,当且仅当它的所有后继状态为必胜状态 规则2:一个状态是必胜的状态,当且仅当它的所有后继状态中至少有一个是必败状态 1.Ferguson游戏: 两个盒子有石子n,m.游戏规则为选择其中一个盒子清空,把另一个盒子的石子拿一些给清空的盒子,但需保证至少都有一个..终态为[1,1] 状态: 从后向前推,[n,m]状态能推出的有一个为必败,则[n,m]必胜 [n,m]能推出的全为必胜,则[n,m]必败 #include <iostream> using name

组合游戏 - SG函数和SG定理

在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的性质: 1.所有终结点是 必败点 P .(我们以此为基本前提进行推理,换句话说,我们以此为假设) 2.从任何必胜点N 操作,至少有一种方式可以进入必败点 P. 3.无论如何操作,必败点P 都只能进入 必胜点 N. 我们研究必胜点和必败点的目的时间为题进行简化,有助于

组合游戏学习笔记 [补档]

基础 满足以下条件的游戏是组合游戏: 有两人参与游戏, 轮流作出决策 无法作出决策的人失败, 然后游戏结束 游戏总能在有限次决策后结束 游戏的同一个状态不会多次到达 任意一个参与者在某一确定状态下可以作出的决策集合只与当前状态有关 定义先手必败状态为必败态, 先手必胜状态为必胜态, 则我们有 无法进行任何移动的状态是必败态. 可以移动到必败态的状态的是必胜态. 所有移动都只能得到必胜态的状态是必败态. 考虑如何判断一个游戏中, 先手是否必胜: 根据定义, 由于游戏中任意状态都不可能重复出现, 因

博弈论题目总结(一)——组合游戏

人类的本质是什么呢?复读机?鸽子? 博弈问题是很有意思的一类题目 我讲的可能不是很明白,但题目都不难建议自己思考 组合游戏的特点: 1.两个人博弈,轮流做出最优决策 2.玩家在每个时刻做出的决策都是能预测到的,是一个确定的集合 3.每种状态可能有多种方式到达,但同一种状态不能在一次游戏中重复到达,且没有平局的情况 4.只要能进行决策,就一定要决策,不能跳过这个回合 SG组合游戏 我们把每种状态抽象成一个点,在起点有一颗棋子,两个人选取最优策略轮流对这颗棋子进行移动,最后不能移动棋子的人失败 显然

博弈论题目总结(二)——SG组合游戏及变形

SG函数 为了更一般化博弈问题,我们引入SG函数 SG函数有如下性质: 1.如果某个状态SG函数值为0,则它后继的每个状态SG函数值都不为0 2.如果某个状态SG函数值不为0,则它至少存在一个后继的状态SG函数值为0 如果某个局面SG函数值为0,则该局面先手必败 放到有向图中,该有向图的核就是SG值为0的点构成的集合 游戏的和 游戏的和的SG函数值=所有子游戏SG函数值的异或和Xor 如果所有子游戏都进行完毕,那么Xor=0,必败 如果某个状态的SG函数值为0,那么后手一定可以做出一种动作,保持

noip复习之数学(4)——组合游戏

我们在此专题中将考虑这样一类组合游戏: (1)两个游戏者轮流操作 (2)游戏的状态集有限,并且不管双方怎么走,都不会再出现以前的状态.这保证了游戏在有限步内结束. (3)谁不能操作谁输,这样的规则避免了平局的出现. 而且我们只考虑公平游戏,即如果一个游戏者可以把状态A变为B,另一个游戏者也可以.国际象棋并不是公平游戏,因为白方可以移动白子,而黑方却不能移动白子. 状态图:为方便描述,我们可以把游戏中的状态画成图.每个节点是一个状态,每条边代表从一个状态转移到另一个状态的操作. 注意:先手必胜状态

[原博客] 组合游戏学习

阅读了<由感性认识到理性认识——透析一类搏弈游戏的解答过程>.<解析一类组合游戏>.<组合游戏略述——浅谈SG游戏的若干拓展及变形>这三篇论文,对组合游戏以及SG函数有了更深的理解.这篇文章摘下了这三篇论文的部分重要内容,以及部分我对组合游戏的理解. 一些名词与约定: 游戏:这里的游戏指的并不是平时玩的那些游戏(Dota2啥的),而是只一些如Nim取石子之类的“益智”组合游戏.并且,我们关注的不是游戏好不好玩,而是游戏有没有必胜策略.下文详细介绍. 状态:用一些数字来表

uva 12163 - Addition-Subtraction Game(组合游戏)

题目链接:uva 12163 - Addition-Subtraction Game 题目大意:两个人进行游戏,对于每一局有一个无向图,给出无向图,每个节点有个K值,两人轮流操作,每次可以选中国一个含有石子的节点,将该节点的一个石子拿掉,然后选择K个有边连接的节点加上一个石子(节点可以重复选择),每个节点的子节点不会超过15个.不能操作的人视为失败.每局有n轮,给定每轮中每个节点上石子的初始值,问先手胜利还是失败. 解题思路:有向图上移动石子的组合游戏,对于没有子节点的节点SG值为0,然后对于每