组合游戏(博弈)

   昨天看大白书翻到了组合游戏这章,看着发觉原来是博弈论的内容,于是便看下去了。真是不看不知道,一看才知道自己的水平有多弱,不过好在还是集中精神地看了大部分。从Nim游戏(n堆石子,每人每次可以从任意一堆中取至少1个、至多整堆的石子,不能取者为输)开始讲起,引入必胜态、必败态的概念——

  1. 一个状态是必败状态当且仅当它的所有后继都是必胜状态。

  2. 一个状态是必胜状态当且仅当它至少有一个后继是必败状态。

  这是刘汝佳大神说的,说得通俗一点就是,必败态的所有后继都是必胜态,必胜态只需有一个后继是必败态即可(这里说的必胜态、必败态都是针对先手来说必胜、必败的意思)。可以看出必败态满足的条件比必胜态更苛刻。没有后继状态的是必败态(也就是终态),一般规则都是不能操作的游戏者为输(是在双方都足够聪明的前提下的),然后可以用一个有向无环图来表示二人博弈的过程。实际上,并不需要这样子做。对于Nim游戏来说,早有科学家给出了一个定理:状态(x1,x2.....xn)为必败状态当且仅当x1^x2^......^xn= 0,即把所有数进行异或和操作,也称Nim sum。能够证明,当Nim sum为0 时为必败状态,非0 时为必胜状态,这是因为,当前状态为0 时,进行的某个操作总能使Nim sum变为非0(因为改变任何一个数字(即任何一堆石子),它的二进制形式会有一位或多位的变化,此时原本各位上都为0 的Nim sum就会有所变动(某些位会变成1)),即所有后继都是必胜状态了;当前状态为非0 时,必定会有某个操作能使Nim sum变为0(只需在Nim sum二进制上那些为1的位上面着手即可),即一定有一个后继状态为必败态。这就是Bouton定理。

  然而,看到后面我才知道,Bouton定理实质上是SG定理的具体应用。什么是SG定理呢?先要介绍下SG函数:对于任意状态x,定义SG(x)= mex(S),其中S是x 的后继状态的SG函数值的集合,而mex(S)表示不在S内的最小非负整数。看到这儿是不是感到有点递归的味道了?没错,实际上,它可以用递推来求出各个SG函数的值(要很注意计算顺序,结合具体题目分析),也可以用加记忆化的深搜回溯(不建议使用)。而SG定理就是,游戏和的必胜(败)态等于各个子游戏的SG函数的Nim sum。这样,就可以把各个子游戏分而治之,大大简化了问题。事实上,很多题目虽然可以套用这些理论来分析(这个确实是真的,SG函数是解决博弈问题的王道!),但往往不会那么生硬地要你去求各个子SG函数,做这些博弈题的时候,一定要看清题意,抓住问题的本质(这句话…对于所有题目都适用),直接搞就行(0.0),只要找清它的必胜态、必败态处于具有什么特征的位置(一般会有个周期的),明显的话一两个循环即可搞掂,别想太多(我有时候刷题就是想太多,总想套上什么特定的算法,模板之类的,结果思维放不开来 -.-||)……总之一句话,多刷题、多get经验才是王道,杭电上面有很多很经典的博弈题(大神们都去刷cf了,别鄙视我等渣渣暂时只会在杭电上找题做),过几天我去水下上面的博弈题,有时间的话再逐个写题解吧~

  

  ——以上理论均引自刘汝佳的大白书,加上了自己的见解,感觉说得不是很清楚的话可以去大白书上 2.4 组合游戏的章节中详细阅读,不喜勿喷,希望各路大神路过指教下。

时间: 2024-12-24 15:01:57

组合游戏(博弈)的相关文章

博弈-组合游戏

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

组合游戏与博弈

[引言] 分金币问题:有100个金币,两个人轮流从这堆金币中取金币,规定每次至少取1个,最多取5个.取完最后一枚金币的人获胜.假入你先手取金币,对方是足够聪明的,你能找到一种必胜的方法吗? [问题分析] 首先我们考虑到这样一个简单的事实,如果最后把6个金币留给对方去取,那么很显然,对方必败.再往前推进一步,如果把12枚金币留给对方去取,对方也必败. 为什么呢?原因很简单,不论对方取几个,我都能够把金币取成6个,这样就回到上一个对方必败的局势了. 那么我们可以更进一步地推出,如果把金币取成18个,

组合游戏 - 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,然后对于每