OI博弈论的若干模型

OI 不是知识竞赛。

平等博弈是完全信息的(知道双方目标及操作收益),交替行动的,知道当前局面和转移的,平等(决策和当前状态操作者无关)的。

不平等博弈和上面一致,但是有一方更加平等。

所有的平等博弈都可以化为 DAG 上的移动游戏。

公平组合游戏是无法行动者败的游戏。这样的游戏每个状态具有结果类 \(\mathcal{N,P}\),分别代表先手必胜和先手必败。

若干简单游戏

DAG 上的移动游戏

有一张有向无环图, 其中一个节点上有一个棋子. 从 Alice 开始游戏, Alice 和 Bob 轮流将这个棋子沿着一条有向出边移动, 无法移动者判负. 问最后谁会获胜。

注意到这是一个平等博弈, 于是只用考虑先手必胜/必败. 于是按照拓扑排序的方式递推出当前棋子在每个节点时对应先手必胜/先手必败即可。

Ferguson Game

有两堆石子分别 \(n,m\) 个, 双人博弈, 每次操作是清空其中一堆石子并将另一堆石子分成任意非空的两堆新的石子. 无法操作者输,问最后谁会获胜。

先手必败当且仅当 \(2\not\mid n,m\),可以归纳证明。

Chomp Game

有一个 \(n\times m\) 的网格,每个人可以选择还有的格子 \((a,b)\),然后把 \((x',y'),\forall x'>a,y'>b\) remove 掉。无法操作者输,问最后谁会获胜。

先手必败当且仅当 \(n=m=1\)。

证明:

先手可以通过选取必然被后面包含的 \((n,m)\) 来 pass 一步。

如果先手是必败的,选择对手的选择即可。

网易车 Game

买车和买 qq 超级会员。

先手必胜当且仅当其买车。

Bash Game

有一堆石子共 \(n\) 个, 双人博弈, 每次从石子堆中取出 \(1\sim m\) 个石子。无法操作者输,问最后谁会获胜。

先手必败当且仅当 \(n\equiv 0\pmod {m+1}\),可以归纳证明。

SG 函数及与其有关的游戏

公平组合游戏的 SG 函数

考虑 DAG \(E\) 上的移动游戏。定义

\[SG(u)=\operatorname{mex}\{SG(v)\mid (u,v)\in E\}
\]

容易发现节点 \(u\) 先手必败当且仅当 \(SG(u)=0\)。

SG定理

一个公平组合游戏可以被一个数,即 SG 函数等价(等价定义见下)。

证明:

首先定义一个游戏的位置(position)是当前局面可以转移到的局面的集合。

两个(可以认为是不同游戏平行进行)位置 \(S\) 和 \(S'\) 的和:\(S+S'=\{S+s'\mid s'\in S\}\cup \{s+S'\mid s\in S\}\)。这告诉我们,加法满足交换律和结合律。

定义两个位置 \(G,G'\) 等价: \(G\approx G'\) 当且仅当 \(\forall H,G+H,G'+H\) 在同一结果类中。这样的等价关系明显是传递的。

Lemma 1

\[\forall A\in \mathcal{P},G\approx G+A
\]

设 \(H\) 是任意位置。

证明:若 \(G+H\in\mathcal{P}\),\(A+G+H\) 显然有后手获胜策略。

若 \(G+H\in\mathcal N\),\(A+G+H\) 可以选择一个 \(G+H\) 的 \(\mathcal P\) 位置 \((G+H)'\),之后 \(A+(G+H)'\in \mathcal P\),根据上一行。所以 \(A+G+H\in \mathcal N\)。证毕。

Lemma 2

\(G\approx G'\iff G+G'\in \mathcal P\)。

证明:

先证 \(G\approx G'\Rightarrow G+G'\in \mathcal P\)。

根据定义,\(G'+G(=G+G')\) 和 \(G+G\) 在一个结果类。而显然 \(G+G\in \mathcal P\),那么 \(G'+G\in \mathcal P\)。

再证 \(G\approx G'\Leftarrow G+G'\in \mathcal P\)。

设 \(A=G+G'\),则 \(A\in \mathcal P\)。根据 Lemma 1,

\[G\approx G+A=G+(G+G')\\=(G+G)+G'=G'+(G+G)\approx G'
\]

那么 \(G\approx G'\)。

接下来证明原命题。

使用归纳证明之。

考虑位置 \(G=\{G_1,G_2,\dots, G_k\},G'=\{*n_1,*n_2,\dots,*n_k\}\)。

下面证明:\(G\approx *m=\operatorname{mex}(*n_i)\)。

先证明 \(G\approx G'\)。考虑 \(G+G'\):由归纳假设这是 \(\mathcal P\),后手可以通过 \(G,G'\) 中的另一个的与之等价的东西回复先手,而 \(A+A\in\mathcal P\)。所以 \(G+G'\in \mathcal P\)。

再证明 \(G'+*m\in\mathcal P\),显然 \(G'+*m\in\mathcal P\Rightarrow G\approx *m\)。

构造此方案。

考虑先手在 \(*m\) 移动到 \(m'<*m\),而后手可以把 \(G'\) 移动到 \(m'\) 得到两个相等的局面,因为 \(m\) 是 \(\operatorname{mex}\)。

如果先手在 \(G'\) 移动到 \(*n_i\),若 \(*n_i<*m\),后手把 \(*m\) 移到 \(*n_i\);否则后手把这个 \(*n_i\) 搞成 \(*m\)。这样都会得到两个相等的局面。那么 \(G'+*m\in \mathcal P\)。

因此,\(SG\) 函数被证明和游戏等价。

Nim 和

看起来有很多人认为这是 SG 定理,尽管并非如此。

根据 SG 定理:我们已经知道一个公平组合游戏等价于一个 Nim 堆。对一个由多个平行进行的组合游戏构成的博弈, 其整体的 SG 函数值为各个子游戏的函数值的异或和。即:多个平行进行的

以下假设 \(\oplus\) 是异或。

设目前的 \(n\) 堆是 \(x_1,x_2,\dots,x_n\),操作后变成 \(y_1,y_2,\dots,y_n\),改变的是第 \(k\) 堆。

设 \(s=\oplus x_i,t=\oplus y_i\),不难发现 \(t=s\oplus x_k\oplus y_k\)。

Lemma 1

若 \(s=0\),\(\forall t,t\neq 0\)。如果没有移动,命题是 vacuously true。如果移动了,由于 \(y_k<x_k\),命题是显然的。

Lemma 2

若 \(s\neq 0\),\(\exists t,t=0\)。设 \(d\) 是 \(s\) 的最高的非零位,选择 \(k\) 使 \(x_k\) 的 \(d\) 非零。令 \(y_k=s\oplus x_k\),此时 \(y_k<x_k\)。此时不难发现 \(t=0\)。

归纳可以证明 Nim 和。

P2197 代码:

#include<bits/stdc++.h>
using namespace std;
int T,n,a,ans;
int main(){
cin>>T;
while(T--){
cin>>n>>a;ans=a;
for(int i=1;i<n;i++)cin>>a,ans^=a;
if(ans)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}

Lasker’s Nim Game

首先

\[SG(n)=\operatorname{mex}(\{SG(k\mid 0\le k<n\}\cup \{SG(k)\oplus SG(n-k)\mid 0<k<n\})
\]

这样的问题可以试图打表猜想。归纳可证

\[SG(4k)=4k-1,SG(4k+1)=4k+1\\
SG(4k+2)=4k+2,SG(4k+3)=4k+4
\]

棋盘游戏

有一个 \(m \times m\) 的棋盘和 \(n\) 个棋子, 初始位置给定. 双人博弈, 每次选取一个在 \((x, y)\) 的棋子移动到 \((x − k, y)\) 或 \((x, y − k)\) 或 \((x − k, y − k)\). 第一个将其中一个棋子放置到 \((0, 0)\) 的人获胜, 问最后谁会获胜。\(m\le 100\)。

如果到 \((1,2)\) 或者 \((2,1)\) 就寄了,否则没有寄。把这两个当成终止态搞即可。

Crosses and Crosses

有一个 \(1 \times n\) 的纸条, 初始全部为空. 双人博弈, 每次选取一个空白的位置涂黑. 第一个满足 “操作后有连续三个位置被涂黑” 的人获胜, 问最后谁会获胜。

找到一个位置之后相当于 ban 了周围的各 \(2\) 个位置。SG 函数可以递推。\(n\le 5000\)。

翻硬币游戏

初始是一个黑白色序列,对于一个满足某性质的下标集合翻转黑白色,规定左端点是必须从黑到白。交替做。

结论:一个局面等价于所有只保留一个黑色(其他全部白)的局面 Nim 的和。

证明好像是显然的,利用 \(G\approx G'\iff G+G'\in \mathcal P\) 归纳(递降?)即可。

当时脑车了,,,看成只能在最左侧为左端点

OI 博弈论若干模型总结(Genshing)的更多相关文章

  1. 自制C#版3DS文件的解析器并用SharpGL显示3DS模型

    自制C#版3DS文件的解析器并用SharpGL显示3DS模型 我已经重写了3ds解析器,详情在此(http://www.cnblogs.com/bitzhuwei/p/CSharpGL-2-parse ...

  2. [源码解析] 深度学习流水线并行 PipeDream(3)--- 转换模型

    [源码解析] 深度学习流水线并行 PipeDream(3)--- 转换模型 目录 [源码解析] 深度学习流水线并行 PipeDream(3)--- 转换模型 0x00 摘要 0x01 前言 1.1 改 ...

  3. 论文笔记系列-Efficient Neural Architecture Search via Parameter Sharing

    Summary 本文提出超越神经架构搜索(NAS)的高效神经架构搜索(ENAS),这是一种经济的自动化模型设计方法,通过强制所有子模型共享权重从而提升了NAS的效率,克服了NAS算力成本巨大且耗时的缺 ...

  4. UML和模式应用5:细化阶段(9)---迈向对象设计

    1.前言 开发者如何设计对象,可以采用如下三种方式: 编码:在编码的同时进行设计 绘图然后编码:绘制一些UML,然后转到如上编码方式,在集成开发环境中编码 只绘图,不编码:使用工具从图中生成一切 本章 ...

  5. CIFAR-10与ImageNet图像识别

    2.1.2 下载CIFAR-10 数据 python cifar10_download.py # Copyright 2015 The TensorFlow Authors. All Rights R ...

  6. UML-如何进行面向对象设计?

    1.开发者如何设计对象? 1).直接编码 2).uml图,然后编码 3).uml图,不编码 绘图要轻量的 2.并行创建若干模型 如:5分钟画交互图,5分钟画类图.反复交替 3.选择什么样的UML CA ...

  7. 浅谈博弈论中的两个基本模型——Bash Game&&Nim Game

    最近在数学这一块搞了蛮多题目,已经解决了数论基础,线性代数(只有矩阵,行列式待坑),组合数学中的一些简单问题.所以接下来不可避免的对博弈论这一哲学大坑开工. 当然,由于我很菜,所以也只能从最基础最容易 ...

  8. [您有新的未分配科技点]博弈论进阶:似乎不那么恐惧了…… (SJ定理,简单的基础模型)

    这次,我们来继续学习博弈论的知识.今天我们会学习更多的基础模型,以及SJ定理的应用. 首先,我们来看博弈论在DAG上的应用.首先来看一个小例子:在一个有向无环图中,有一个棋子从某一个点开始一直向它的出 ...

  9. Unity 3d导入3dMax模型 产生若干问题

    Unity 3d导入3dMax模型 会产生若干问题,按照官方 的说明,将max 模型导成fbx文件 导入untiy似乎也不能解决 1.x轴向偏转3dmax模型导入后自动有一个x轴270度的偏转,巧合的 ...

  10. OI中组合数的若干求法与CRT

    OI中组合数的若干求法与CRT 只是下决心整理一下子呢~ 说明:本篇文章采用\(\binom{a}{b}\)而不是\(C_{a}^b\),以\(p\)指代模数,\(fac_i\)指代\(i!\),\( ...

随机推荐

  1. GPUStack v0.4:文生图模型、语音模型、推理引擎版本管理、离线支持和部署本地模型

    GPUStack 是一个专为运行 AI 模型设计的开源 GPU 集群管理器,致力于支持基于任何品牌的异构 GPU 构建统一管理的算力集群.无论这些 GPU 运行在 Apple Mac.Windows ...

  2. Gitbook的docker安装配置

    创建目录:/gitbook/gitbook 和 /gitbook/html /gitbook/gitbook目录下,touch新建README.md docker安装gitbook docker ru ...

  3. 【Javaweb】【Maven】Use IDEA and Maven create a Java Web Application 

    Open This Url :https://mvnrepository.com/ Search Servlet Select the latest version Copy it! Paste An ...

  4. 【问题解决】Pycharm、IDAE等乱码问题:运行输出窗口就正常显示,调试乱码的问题

    添加如下内容 -Dfile.encoding=UTF-8 重启软件生效

  5. WPS在ArchLinux常见问题

    问题简述wps在aur源上有包,直接下载安装即可,但是通过包管理器安装的wps会出现一些奇怪的问题,我遇到的有两个: wps在打开时提示缺少字体wps word不能导出pdf文档,同时wps pdf也 ...

  6. MessageConsumer

    @Slf4j @Component public class MessageConsumer { @Autowired private PpcRequestMessageListener ppcReq ...

  7. 推荐一个C#轻量级矢量图形库

    推荐一个轻量级矢量图形库,可用于生成 PDF.SVG.PNG等. 01 项目简介 VectSharp 是一个功能强大的 C# 库,专门用于创建矢量图形,包括文本,不依赖任何第三方,支持跨平台运行,包括 ...

  8. python_Django---基础

    1.创建app 终端:python3.x manage.py startapp  app(名字) 2.路由创建 urls.py: 导入函数:from app(app名) import views 创建 ...

  9. Qt编写嵌入式linux输入法/支持自定义词语和繁体/支持wayland和watson/纯QWidget/界面精美可换肤

    一.功能特点 纯QWidget编写,原创输入法机制,没有任何第三方动态库的依赖. 支持各种Qt版本,包括Qt4.Qt5.Qt6及后续版本. 支持各种编译器,包括mingw.msvc.gcc.clang ...

  10. [转]OpenCV学习笔记(十五)——摄像机的标定和3D重建calib3D

    OpenCV学习笔记(十五)--摄像机的标定和3D重建calib3D OpenCV学习笔记(16)双目测距与三维重建的OpenCV实现问题集锦(一)图像获取与单目定标 翻译 搜索 复制