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. 性能调优、虚拟机、垃圾回收、软硬件协调相关文章和视频 — Part1

    本文由 ImportNew - 顾星竹 翻译自 javacodegeeks.如需转载本文,请先参见文章末尾处的转载要求. ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 J ...

  2. Java单例对象同步问题探讨

    在本文中,作者向大家讲述了Single Call 模式的原理,同时也介绍了Single Call 模式的实现问题.  评论: 邓明 (dengming@cn.ibm.com), 高级信息系统工程师, ...

  3. 解决window.close()在谷歌浏览器不起作用

    简单明了直接上解决方法: let url = ' '; // 空字符串中间要加空格 window.open(url, '_self').close();

  4. Vue日常使用与常见问题

    使用: 1.在使用elementUI自定义表格中字段样式 官方文档:https://element.eleme.cn/2.10/#/zh-CN/component/table # 基础使用 <t ...

  5. C# 企业微信消息推送对接,实现天气预报推送

    C# 企业微信消息推送对接,实现天气预报推送 迷恋自留地 准备工作 需要获取的东西1. 企业Id,2.应用secret 和 应用ID 获取企业id 注册完成后,在我的企业=>企业信息=>最 ...

  6. e00格式分析

    Arc/Info Export (E00) Format Analysis Original Author: Unknown Last Update: 2000-02-24,  Daniel Mori ...

  7. .NET开发规范v1.0

    一. 编程规范 (一) 命名风格 命名要找更有表现力的词,更专业的词,比如获取数据不用get而使用fetch 别害怕长名称,长而具有描述性的名称比短而令人费解的名称好 为作用域大的名字采用更长的名字, ...

  8. vue3和elements创建应用

    一. 创建环境 1. 创建D:\code\vue 文件夹 2. vscode打开文件夹 3. 打开终端,输入 npm install -g @vue/cli 4. 配置环境变量 终端输入:npm co ...

  9. 时代新宠儿——HEIF图像格式:节省50%空间

    HEIF全称High Efficiency Image File Format(高效图像文件格式),是一种高效的图片封装格式,文件名通常为.heif或者.heic后缀.HEIF能够在保持画质不变的前提 ...

  10. MySQL 迁移到 PG 怎么做

    千万不要用 pgloader,就是个垃圾 etlalchemy 是值得信赖的选择. https://github.com/seanharr11/etlalchemy 还有其它基于 sqlalchemy ...