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. 成为JavaGC专家Part II — 如何监控Java垃圾回收机制

    本文是成为Java GC专家系列文章的第二篇.在第一篇<深入浅出Java垃圾回收机制>中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5 ...

  2. Graylog之进阶操作

    有关系统的索引,权限,pipline 参考文章: https://mp.weixin.qq.com/s/LROHPjZEJPMsS5M_a3pPFw https://blog.csdn.net/wei ...

  3. 负载均衡-一致性Hash算法

    1. Hash算法 哈希(Hash)也称为散列,把任意长度的输入,通过散列算法变换成固定长度的输出,该输出就是散列值.哈希值(hashCode).(来自:百度百科) 在现实中,设计者常常将散列值作为索 ...

  4. fastadmin表格 - 自定义接口

    1.文本过长溢出 文本超过250px则隐藏,如果需要修改此宽度,请在具体页面中重新定义formatter方法 点击通过弹窗展示完整的内容 弹窗插件使用Layer.js 调用方法 {field: 'co ...

  5. cento 申请ssl证书笔记

    如果您的Certbot工具没有内置的Nginx插件,您可以尝试以下方法来申请证书并配置Nginx服务器: 安装Certbot的Nginx插件: sudo yum install certbot-ngi ...

  6. Visual Studio 使用IISprofile进行远程部署

      ​

  7. uView的DatetimePicker组件在confirm回调中取不到v-model的最新值

    前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app,在uniapp生态中u ...

  8. windows和Linux上安装nvm及相关配置

    Windows安装: 1.详情参考:https://blog.csdn.net/goods_yao/article/details/137854626本文详细介绍了在Windows系统中使用nvm(N ...

  9. Attribute application@label value=(xxx) from AndroidManifest.xml:8:16-37 is also present at [com.github.adrielcafe:AndroidAudioConverter:0.0.8] AndroidManifest.xml:11:18-50 value=(@string/app_name)

    关于安卓编译错误Attribute application@label value=(xxx) from AndroidManifest.xml:8:16-37 is also present at ...

  10. Java 和 native 的一些进展

    GraalVM Java 生成 DLL/SO https://medium.com/graalvm/3-ways-to-polyglot-with-graalvm-fb28c1542b45 Proje ...