首页 > 其他分享 >博弈论之SG函数 学习笔记

博弈论之SG函数 学习笔记

时间:2023-07-08 17:55:53浏览次数:56  
标签:局面 有向图 游戏 博弈论 笔记 oplus SG ldots

在许多地方曾经行过这样一个小游戏,摆出三堆硬币。分别包含3枚、5枚、7枚。两人轮流行动每次可以任选一堆,从中取走任意多枚硬币,可把一堆取完,但不能不取。取走最后一枚硬币者获得胜利。

这类游戏可以推广为更加一般的形式:

给定 \(n\) 堆物品,第 \(i\) 堆物品有 \(A_i\) 个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者获胜。两人都采取最优策略,问先手能否必胜。

我们把这种游戏称为 NIM 博弈。把游戏过程中面临的状态称为 局面。整局游戏第一个行动的称为 先手,第二个行动的称为 后手。若在某一局面下无论采取何种行动,都会输掉游戏,则称该局面 必败。所谓采取最优策略是指,若在某一局面下存在某种行动,使得行动后对手面临必败局面,则优先采取该行动。同时,这样的局面被称为 必胜。我们讨论的博弈问题一般都只考虑理想情况,即两人均无失误,都采取最优策略行动时游戏的结果。NIM 博弈不存在平局,只有 先手必胜先手必败 两种情况。

定理

NIM博弈先手必胜,当且仅当 \(A_1 \oplus A_2 \oplus \ldots \oplus A_n \neq 0\)。

这里,\(\oplus\) 表示异或符号。

证明:

所有物品都被取光是一个必败局面(对手取走最后一件物品,已经获得胜利),此时显然有 \(A_1 \oplus A_2 \oplus \ldots \oplus A_n = 0\)。

对于任意一个局面,如果 \(A_1 \oplus A_2 \oplus \ldots \oplus A_n = x \neq 0\),设 \(x\) 的二进制表示最高位的 \(1\) 在第 \(k\) 位,那么至少存在一堆石子 \(A_i\),它的第 \(k\) 位是 \(1\)。显然 \(A_i \oplus x \lt A_i\),我们就从 \(A_i\) 中取走若干石子,使其变为 \(A_i \oplus x\),就得到了一个各堆石子数异或起来等于 \(0\) 的局面。

对于任意一个局面,如果 \(A_1 \oplus A_2 \oplus \ldots \oplus A_n = 0\),那么无论如何取石子,到的局面下各堆石子异或起来都不等于 \(0\)。可用反证法证明,假设 \(A_i\) 被取成了 \(A_i'\),并且 \(A_1 \oplus A_2 \oplus A_i' \oplus A_n = 0\)。由异或运算的消去律得 \(A_i' = A_i\),与”不能不取石子”的规则矛盾。

综上所述,再由数学归纳法可知,\(A_1 \oplus A_2 \oplus \ldots \oplus A_n \neq 0\) 为必胜局面,一定存在一种行动让对手面临“各堆石子异或起来等于 \(0\)”。\(A_1 \oplus A_2 \oplus \ldots \oplus A_n = 0\) 为必败局面,无论如何行动,都会让对手面临一个“各堆石子异或起来不等于 \(0\)”的必胜局面。

证毕。

公平组合游戏ICG

若一个游戏满足:

  1. 由两名玩家交替行动;
  2. 在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关;
  3. 不能行动的玩家判负。

则称该游戏为一个公平组合游戏。

NIM 博弈属于公平组合游戏,但常见的棋类游戏,比如围棋,就不是公平组合游戏。因为围棋交战双方分别只能落黑子和白子,胜负判定也比较复杂,不满足条件 2 和条件 3。

有向图游戏

给定一个有向无环图,图中有一个唯一的起点,在起点上放有一枚棋子。两名玩家交替地把这枚棋子沿有向边进行移动,每次可以移动一步,无法移动者判负。该游戏被称为 有向图游戏

任何一个公平组合游戏都可以转化为有向图游戏。具体方法是,把每个局面看成图中的一个节点,并且从每个局面向沿着合法行动能够到达的下一个局面连有向边。

Mex运算

设 \(S\) 表示一个非负整数集合。定义 \(mex(S)\) 为求出不属于集合 \(S\) 的最小非负整数的运算,即:

\[mex(S) = \min\limits_{x \in \mathbb{N}, x \notin S} \{ x \} \]

SG函数

在有向图游戏中,对于每个节点 \(x\),设从 \(x\) 出发共有 \(k\) 条有向边,分别到达节点 \(y_1, y_2, \ldots, y_k\),定义 \(SG(x)\) 为 \(x\) 的后继节点 \(y_1, y_2, \ldots, y_k\) 的 SG 函值构成的集合再执行 \(mex\) 运算的结果,即:

\[SG(x) = mex(\{ SG(y_1), SG(y_2), \ldots, SG(y_k) \}) \]

特别地,整个有向图游戏 \(G\) 的 SG 函数值被定义为有向图游戏起点 \(s\) 的 SG 函数值,即 \(SG(G) = SG(s)\)。

有向图游戏的和

设 \(G_1, G_2, \ldots, G_m\) 是 \(m\) 个有向图游戏,定义有向图游戏 \(G\),它的行动规则是任选某个有向图游戏 \(G_i\),并在 \(G_i\) 上行动一步。\(G\) 被称为优先图游戏 \(G_1, G_2, \ldots, G_m\) 的和。

有向图游戏的和的 SG 函数值等于它包含的各个子游戏 SG 函数值的异或和,即:

\[SG(G) = SG(G_1) \oplus SG(G_2) \oplus \ldots \oplus SG(G_m) \]

上述性质被称为 SG定义。SG定理的证明

定理

有向图游戏的某个局面必胜,当且仅当该局面对应节点的 SG 函数值大于 \(0\)。

有向图游戏的某个局面必败,当且仅当该局面对应节点的 SG 函数值等于 \(0\)。

我们不再详细证明该定理。读者可以这样理解:

在一个没有出边的节点上,棋子不能移动,它的 SG 值为 \(0\),对应必败局面。

若一个节点的某个后继节点 SG 值为 \(0\),在 mex 运算后,该节点的SG值大于 \(0\)。这等价于,若一个局面的后继局面中存在必败局面,则当前局面为必胜局面。

若一个节点的后继节点 SG 值均不为 \(0\),在 mex 运算后,该节点的 SG 值为 \(0\)。这等价于,若一个局面的后继局面全部为必胜局面,则当前局面为必败局面。

对于若干个有向图游戏的和,其证明方法与 NIM 博弈类似。(即上面 SG定理的证明

标签:局面,有向图,游戏,博弈论,笔记,oplus,SG,ldots
From: https://www.cnblogs.com/quanjun/p/17537582.html

相关文章

  • 云原生之使用Docker部署Dailynotes个人笔记管理工具
    (云原生之使用Docker部署Dailynotes个人笔记管理工具)一、Dailynotes介绍DailyNotes用于每天记笔记和跟踪任务的应用程序。本工具使用markdown进行编辑,也可以作为个人任务看板。二、检查本地docker环境1.检查docker版本[root@jeven~]#docker-vDockerversion20.10.21......
  • python高级语法笔记
    5.python高级一/demo03_python环境变量路径.pyfromloguruimportloggerimportsyssys.path.append('/Users/toby/Downloads/PythonAdvanced/code/pythonAdvanced5Verify')forpathinsys.path:logger.debug(path)5.python高级一/demo09_xxxsetter和xxxdeleter装饰......
  • OSG 使用整理(5):模板测试与边缘效果
    osg使用整理(5):模板测试与边缘效果1模板测试​ 在渲染管线中,模板测试在片段着色器后执行,通过像素与模板缓冲中的模板值比较,选择性丢弃或者保存这个像素颜色。我们可以通过更新模板测试来获得一些很有意思的效果。下图为LearnOpenGL网站一个例子。​ 可以发现,颜色缓冲经过模......
  • C++ Primer 学习笔记——第七章
    第七章类前言基本数据类型有时候并不能解决某些特定问题,而通过自定义的类就可以通过理解问题概念,使得程序更加容易编写、调试和修改。类的基本思想是数据抽象(dataabstraction)和封装(encapsulation)。数据抽象是一种依赖于接口(interface)和实现(implementation)分离的编程(以及设......
  • 字符串学习笔记
    哈希最长公共子串求m个长为n的字符串的最长公共子串。二分答案,check(k)的思路就是把每个字符串的长度为k的子串哈希值扔到哈希表里,每个字符串的每种子串都只扔一次,最后看有没有一种出现了n次。......
  • Cesium学习笔记3——加载倾斜摄影模型
    本地的3dtiles模型采用ContextCapture19生成. 利用Cesium实验室V3.08对OSGB格式转换到3dtiles,得到的结果加载时老是报TypeError:Cannotreadpropertiesofundefined(reading'updateTransform')错误。没搞明白为啥,不过3dtiles文件夹层级目录的命名应该从以前到现在发生了......
  • 公司刚来的京东架构师:看完我写的spring笔记,甩给了我一份文档
    pring是分层的full-stack(全栈)轻量级开源框架,以IoC和AOP为内核,提供了展现层SpringMVC和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的JavaEE企业应⽤开源框架。  本文目录:Spring概述核心思想手写......
  • [学习笔记]python爬虫初体验
    同学吹水,提到了爬虫,于是金工实习回来晚上看了看爬虫(话说为啥所有爬虫教程前面都是一大串python基础教程啊)importurllib.request#1、定义一个网址urlurl='http://www.baidu.com'#2、模拟浏览器向服务器发送请求response=urllib.request.urlopen(url)print(type(response......
  • Java官方笔记14流
    ProcessingDatainMemoryTheStreamAPIisprobablythesecondmostimportantfeatureaddedtoJavaSE8,afterthelambdaexpressions.Inanutshell,theStreamAPIisaboutprovidinganimplementationofthewellknownmap-filter-reducealgorithmtoth......
  • openGauss学习笔记-02 openGauss系统架构
    openGauss学习笔记-02openGauss系统架构openGauss是单机系统,在这样的系统架构中,业务数据存储在单个物理节点上,数据访问任务被推送到服务节点执行,通过服务器的高并发,实现对数据处理的快速响应。同时通过日志复制可以把数据复制到备机,提供数据的高可靠和读扩展。2.1软件架构open......