首页 > 其他分享 >博弈论初探

博弈论初探

时间:2022-11-11 21:22:24浏览次数:45  
标签:xor 游戏 博弈论 后继 异或 初探 SG operatorname

博弈论基础

概念

  1. 先手:当前局面轮到谁操作,谁就是当前局面的先手
  2. P 点:当前先手必败点。
  3. N 点:当前先手必胜点。

公平组合游戏(ICG)的性质

  1. 没有出边(无法操作)的点是 P 点(公理)。
  2. N 点出边中至少有一条连到 P 点(理解:如果当前局面必胜,那么一定能通过某个操作使得下一局面对手必败)。
  3. P 点出边只会连到 N 点(理解:如果当前局面必败,则不存在在下一局面中使得对手必败的操作)。

SG函数

定义

mex 函数的定义:

\[(1)\qquad\operatorname{mex}(S)=\min(\{k\mid k\not\in S,k\in\mathbb N\}) \]

它将一个数集映射到一个自然数。

SG 函数的定义:

\[(2)\qquad\operatorname{SG}(u)=\operatorname{mex}(\{\operatorname{SG}(v)\mid v\in T_u\}) \]

其中,$ T_u $ 表示从 $ u $ 点的所有后继组成的点集。

SG 定理(证明在性质后面):

\[(3)\qquad\operatorname{SG}(x)=\operatorname{xor}_{y\in G_x}\operatorname{SG}(y) \]

其中,$ G_x $ 表示 $ x $ 游戏可拆分成的互不干涉的子游戏的集。

(我这么理解游戏的拆分:用一个 $ n $ 维向量 $ \mathbf{a}=(a_1,a_2,\cdots,a_n) $ 表示一个游戏状态。每个维度坐标代表一个子游戏的状态。该状态能到达的其他状态有且只有一个维度坐标发生变化。我们便可以把它拆成几个子游戏。对于每个子游戏,可以把在这个维度上产生变化的边拿出来单独生成一个图来计算。事实上,你可以认为它就是在多个有向无环图上的游戏。

SG 函数将一个游戏状态(不一定是一个数)映射到一个自然数。

性质

对于当前状态 $ x $,若 $ \operatorname{SG}(x)=0 $ 则 $ x $ 为 P 点,否则为 N 点。

证明

在网上看了一些证明后,我决定自己编一下:

  • 若 $ x $ 没有出边,则 $ \operatorname{SG}(x)=\operatorname{mex}(\varnothing)=0 $,该性质显然成立。
  • 假设我们已经知道,对于 $ x $ 的所有出边连接到的点都满足此性质。
  • 那么,如果 $ \operatorname{SG}(x)=0 $,说明 $ x $ 的所有后继中,没有 SG 函数值为零的。
  • 因此,$ x $ 的所有后继都是 N 点,即 $ x $ 为 P 点。
  • 如果 $ x $ 的 SG 函数值不为零,说明其后继中至少有一个 P 点,即 $ x $ 为 N 点。
  • 应用归纳法即可。

对(3)式的证明:(为了简便,将 SG 函数值简称为 SG 值)

  • 若 $ x $ 的所有子游戏必败,则它们的 SG 值异或和为零,$ x $ 显然为 P 点。
  • 假设对于 $ x $ 的所有子游戏,(3)式成立。
  • 若 $ \operatorname{xor}_{y\in G_x}\operatorname{SG}(y)=k>0 $,则 $ \exists t\in G_x,\operatorname{SG}(t) $ 在二进制下的最高位与 $ k $ 相同。此时,$ \operatorname{SG}(t) \operatorname{xor} k<\operatorname{SG}(t) $。
  • 根据 mex 函数定义,$\forall i\in[0,\operatorname{SG}(t)),\exists s\in G_t,\operatorname{SG}(s)=i $。因此,一定存在 SG 值从 $ \operatorname{SG}(t) $ 转移到 $ \operatorname{SG}(t)\operatorname{xor}k $ 的边(这里的 SG 值指的是 $ t $ 在 $ x $ 子游戏异或和中的贡献)。
  • 子游戏 $ t $ 的 SG 值从 $ \operatorname{SG}(t) $ 转移到 $ \operatorname{SG}(t)\operatorname{xor}k $ 后,$ x $ 子游戏的 SG 值异或和为 $ k\operatorname{xor}k=0 $,即存在有从“子游戏 SG 值异或和大于零”转移到 P 点的边。
  • 综上,“子游戏 SG 值异或和大于零”的情况是一个 N 点。
  • 若 $ \operatorname{xor}_{y\in G_x}\operatorname{SG}(y)=0 $,则无论走那条边都会改变其中一个子游戏的贡献,它是一个 P 点。所以它的 SG 值为 $ 0 $。
  • 应用归纳法即可。

然而你会发现,上面的证明中没有证当“子游戏 SG 值异或和大于零”时,SG 定理成立($ \operatorname{SG}(x)=k $)。这就是下面我们要证明的。

  • 这等同于:

\[\forall i\in[0,k)\cup\mathbb Z,\exists u\in G_x,v\in T_u,k \operatorname{xor}\operatorname{SG}(u)\operatorname{xor}\operatorname{SG}(v)=i \]

\[\nexists u\in G_x,v\in T_u,k \operatorname{xor}\operatorname{SG}(u)\operatorname{xor}\operatorname{SG}(v)=k \]

  • 对于第二个式子,由于一个状态的 SG 值一定不出现在它的后继,显然成立。
  • 推一下第一个式子:

\[\operatorname{SG}(v)=\operatorname{SG}(u)\operatorname{xor}k\operatorname{xor}i\quad(i\in[0,k)\cup\mathbb Z,u\in G_x,v\in T_u) \]

  • 问题变为:证明 $ \exists u\in G_x,\operatorname{SG}(u)\operatorname{xor}k\operatorname{xor}i<\operatorname{SG}(u) $。
  • 问题又变为:证明无论 $ k\operatorname{xor}i $ 最高在哪一位,总存在一个 $ u $,其 SG 值在那一位上是 1。
  • 若 $ k $ 在那一位上是 1,则上述命题显然成立。
  • 否则, $ k $ 在那一位上是 0,$ i $ 在那一位上是 1。如果 $ k $ 在那一位前面与 $ i $ 在那一位前面的数字完全相同,则不满足 $ i<k $ 的条件。但如果有区别,则 $ k\operatorname{xor}i $ 的最高位不是那一位,矛盾。因此,不存在这种情况。

证毕。

Anti-SG 游戏

性质

胜利条件与 ICG 相反,不能行动的玩家判胜。ICG 的性质 2 和 3 仍适用。

SJ 定理

先手必胜条件(二选一):

  • 游戏的 SG 值不为零,且存在一个单一游戏的 SG 值大于一。
  • 游戏的 SG 值为零,且不存在一个单一游戏的 SG 值大于一。

注意,“单一游戏”不是后继!

如果你觉得用文字语言难以理解,你可以看看我翻译的数学语言:

点 $ x $ 是 N 点,当且仅当:

\[\operatorname{SG}(x)\ne 0,\exists u\in G_x,\operatorname{SG}(u)>1 \]

\[\operatorname{SG}(x)=0,\nexists u\in G_x,\operatorname{SG}(u)>1 \]

证明(待添加)

Multi-SG 游戏

性质

  1. 无出边的点是 P 点(与 ICG 相同)。
  2. 一个单一游戏的后继可以是多个单一游戏(一个一维向量的后继可以是多维向量)。
  3. 先手必胜、必败条件与 ICG 相同。
  4. 对每次拆分成两堆的游戏有如下性质:

\[\operatorname{SG}(x)=\begin{cases}x-1&4|x\\x&x\equiv1,2\pmod4\\x+1&x\equiv3\pmod4\end{cases} \]

Every-SG 游戏

性质

对没有结束的任何一个单一游戏,操作者必须对其进行一步操作,不能操作判负。

标签:xor,游戏,博弈论,后继,异或,初探,SG,operatorname
From: https://www.cnblogs.com/hihihi198/p/16882051.html

相关文章

  • 图学习初探Paddle Graph Learning 构建属于自己的图【系列三】
    项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5000517?contributionType=1如遇到问题查看原项目解决图学习温故以及初探PaddleGraphLearning(PGL)构建......
  • 简单博弈论
    前置知识IGC游戏一、定义:两名选手两名选手轮流行动,每一次行动可以在有限合法操作集合中选择一个游戏的任何一种可能的局面(position),合法操作集合只取决于这个局面......
  • 投资初探2
    ——这是第55篇原创文章昨天上证指数收盘2890.49,今日收盘2901.67,上升0.39个百分点,总体维稳,预计未来还会有调整。今天继续谈《韭菜的自我修养》这本书有关投资的认知。投......
  • [MaybeCTF] CTF新手赛初探
    自己学校自己专业组织的CTF,来捧个场[MaybeCTF]部分题目WPMaybeCTF官方link目录[MaybeCTF]部分题目WPMaybeCTF官方link个人赛(摆烂了属于是)MISC1.sign_in2.rackyour......
  • Codeforces Round #832 (Div. 2) C. Swap Game (博弈论)
    https://codeforces.com/contest/1747/problem/CC.SwapGame题目大意:给定一个长度为n的数组a,每次只要当我想动但是发现a[1]==0的时候我就输了要么就是我每次把a[1]......
  • python 虚拟机框架-运行时环境初探
    在Python中,关于线程状态信息的抽象是通过PyThreadState对象来实现的,一个线程将拥有一个PyThrasdState对象。所以从另一种意义来说,这个PyThreadState对象也可以看成是对线程......
  • datadog初探
    #DD_AGENT_MAJOR_VERSION=7DD_API_KEY=85e12165638768bfda5a1747a370000dDD_SITE="datadoghq.com"bash-c"$(curl-Lhttps://s3.amazonaws.com/dd-agent/scripts/inst......
  • 博弈论乱写1:常见模型
    按照自己的学习顺序写的,可能有点奇怪。这是这个系列中唯一有用的东西了。ICG游戏Nim游戏有\(n\)堆石子,第\(i\)堆有\(a_i\)个,每次行动可以从任意一堆中取出任......
  • c++从入门到精通——面向对象初探以及友元函数、对象
    面向对象每个对象内存地址独一无二,空对象分配一个字节空间#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;classPerson{public://intm_A;voi......
  • 博弈论nim游戏
    nim游戏给定n堆物品,第i堆物品有Ai个,两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品的人获胜。定理:nim游戏先手必胜,当且仅......