首页 > 其他分享 >博弈论入门

博弈论入门

时间:2024-08-24 10:27:27浏览次数:12  
标签:状态 入门 ... 博弈论 Nim oplus SG 游戏

博弈论入门

博弈论主要研究的是:在一个游戏中,进行游戏的多位玩家的策略。

公平组合游戏

定义:

  • 游戏有两个人参加,轮流参加决策,双方均知道游戏的完整信息;
  • 任意一名玩家在某一状态可以做出的决策集合只与当前状态有关,与游戏者无关;
  • 游戏中某一状态不可能多次抵达,游戏以玩家无法行动为结束,且游戏一定会在有限步后以非平局结束。

\(Nim\) 游戏

\(Nim\) 游戏便是一个典型的公平组合游戏。

\(n\) 堆石子,分别有 \(a_1,a_2,a_3,a_4...a_n\) 个石子,两个玩家分别取走任意一堆的任意个石子,但不能不取。取走最后一个石子的人获胜。

博弈图与状态

如果将每个状态视作一个点,再将其与其后续状态连边则得到一个博弈状态图。

若将节点 \((i,j,k)\) 表示局面 \(i,j,k\) 时的状态,则可以这样表示博弈状态图:

定义 必胜状态(后简称 \(N\) ) 为先手必胜的状态,必败状态(后简称 \(P\) )为先手必败的状态。

易得以下三个结论:

  1. 没有后继状态的状态是 \(P\) 。
  2. 一个状态是 \(N\) ,当且仅当存在至少一个 \(P\) 为它的后继结点。
  3. 一个节点是 \(P\) ,当且仅当它的后继结点都为 \(N\) 。

对于定理一,若游戏进行不下去了,则此玩家输掉游戏。

对于定理二,如果该状态至少有一个后继状态为 \(P\) ,则玩家可以通过操作到该 \(P\) 状态,则对手一定是 \(P\) 状态——对手一定失败,自己就赢得了胜利。

对于定理三,如果不存在一个后继结点为 \(P\) ,则无论如何操作,只能达到 \(N\) ,则对手一定是 \(N\) 状态——对手一定胜利,则自己一定失败。

\(Nim\) 和

让我们再次回到 \(Nim\) 游戏。

通过绘画博弈图,我们可以在 \(O(\prod_{i=1}^n a_i)\) 的时间里求出该局面是否先手必赢。

但是,这样时间复杂度实在太高。有没有更好的方法呢?

定义 \(Nim\) 和 \(=a_1 \oplus a_2 \oplus a_3 \oplus ... \oplus a_n\) 。0

当且仅当 \(Nim\) 和为零时,该状态为必败状态,否则为必胜状态。

证明

为什么异或的结果会与胜负有关?

要解决这个问题,只需证下面三个定理:

  1. 没有后继状态的状态是 \(P\) 。
  2. 对于 \(a_1 \oplus a_2 \oplus ... \oplus a_n \ne 0\) 的局面,一定存在某种移动使 \(a_1 \oplus a_2 \oplus ... \oplus a_n = 0\) 。
  3. 对于 \(a_1 \oplus a_2 \oplus ... \oplus a_n = 0\) 的局面,一定不存在某种移动使 \(a_1 \oplus a_2 \oplus ... \oplus a_n = 0\) 。

对于一,唯一无后继结点的状态为全0局面,此时 \(a_1 \oplus a_2 \oplus ... \oplus a_n = 0\) 。

对于二,假设 \(a_1 \oplus a_2 \oplus ... \oplus a_n = k \ne 0\) 。设我们将 \(a_i\) 改为 \(a_j\) 则 \(a_j=a_i \oplus k\) 假设 \(k\) 的最高位为 \(d\) 即 \(k \in [2^d,d^{d+1})\) 。根据定义,一定有奇数个 \(a_i\) 的二进制第 \(d\) 位为1。满足这个条件的 \(a_i\) 一定也满足 \(a_j > a_i \oplus k\) ,所以这是一个合法的移动。

对于三,若要将 \(a_i\) 变为 \(a_j\) ,根据异或的运算规则可以得出 \(a_i=a_j\) ,显然不是合法移动。

有向图游戏和 \(SG\) 函数

有向图游戏是一个经典的博弈游戏——实际上,大部分公平组合游戏都可以转化为有向图游戏。

在一个有向无环图上,只有一个起点,上面有个棋子,两个玩家轮流沿着有向边推动棋子,不能走的玩家判负。

定义 \(max\) 函数的值为不属于集合 \(S\) 的最小非负整数,即:

\(mex(S)=min\{x\}(x \notin S ,x \in N)\)

例如 \(mex(\{0,2,4\})=1,mex(\{1,2\}=0)\) 。

对于状态 \(x\) 和他的所有 \(k\) 个后续 \(y_1,y_2,...,y_k\) ,定义 \(SG\) 函数:

\(SG(x)=mex\{SG(y_1),SG(y_2),...,SG(y_k) \}\)

而对于由 \(n\) 个有向图组成的有向图游戏组成的组合游戏,设他们的起点分别为 \(s_1,s_2...s_n\) ,则有定理:当且仅当 \(SG(s_1) \oplus SG(s_2) \oplus...SG(s_n) \not = 0\) 时,这个游戏是先手必胜的。同时,这也是一个组合游戏的游戏状态 \(x\) 的 \(SG\) 值。

这一定理被称为 \(Sprague–Grundy\) 定理( \(Sprague–Grundy Theorem\) ),简称 \(SG\) 定理。

\(SG\) 函数的证明

使用数学归纳法。

假设对于游戏状态 \(x\) ,其当前节点 \(s_1^`,s_2^`,...s_n^`(对于任意i有s_i^`<s_ i)\) ,皆满足 \(SG\) 定理,显然当 \(SG(s_1)^`=SG(s_2)^`=...=SG(s_n)^`=0\) 时,该状态能满足 \(SG\) 定理。

只需证明对于游戏状态 \(x\) ,当其节点 \(s_1^`,s_2^`,...s_n^`\) 符合 \(SG\) 定理, \(SG\) 定理便成立。

其实可以看做一个 \(Nim\) 游戏,后略。

\(SG\) 函数的应用

\(SG\) 定理适用于 任何公平的两人游戏 ,它常被用于决定游戏的输赢结果。

计算给定的状态的 \(SG\) 值的步骤一般包括:

  • 获取从此状态所有可能的转换;

  • 每个转换都可以导致 一系列独立的博弈(退化情况下只有一个)。计算每个独立博弈的 \(SG\) 值并对它们进行 异或求和

  • 在为每个转换计算了 \(SG\) 值之后,状态的值是这些数字的 \(mex\) 。

  • 如果该值为零,则当前状态为输,否则为赢。

标签:状态,入门,...,博弈论,Nim,oplus,SG,游戏
From: https://www.cnblogs.com/adsd45666/p/18377481

相关文章

  • 【全面解析】大模型入门到精通指南:零基础起步,详尽教程一帖收藏!
    大模型的定义大模型是指具有数千万甚至数亿参数的深度学习模型。近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果,如自然语言处理,图片生成,工业数字化等。为了提高模型的性能,研究者们不断尝试增加模型的参数数量,从而诞生了大模型这一概念。本文讨......
  • Twenty Lectures on Algorithmic Game Theory 算法博弈论二十讲 Lecture 5 Revenue-Ma
    TwentyLecturesonAlgorithmicGameTheory算法博弈论二十讲Lecture5Revenue-MaximizingAuctions(上)Lecture5Revenue-MaximizingAuctions第2至第4讲聚焦于设计能够最大化社会福利的机制,无论是精确还是近似。这类机制的收益产生仅仅是副作用,是激励代理人如实......
  • 渗透测试SSRF技术 之 【服务端请求伪造】 SSRF和CSRF区别是啥 从知道是啥到如何玩ssrf
    目录ssrf和csrf的区别是啥SSRF攻击流程SSRF带来的危害:最后:ssrf和csrf的区别是啥:解释:CSRF:跨站请求伪造,客户端请求伪造。SSRF(Server-SideRequestForgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标......
  • 博弈论学习笔记
    博弈论学习笔记一.公平组合游戏(ImpartialGame)公平组合游戏满足以下性质:决策公平(双方操作的集合是一样的)无隐藏信息(双方均知道游戏的所有信息)无随机部分无平局有固定的结论是,若双方都绝顶聪明,对于固定的状态\(G\),能判断其是必胜还是必败态。二.巴什博弈(BushGame)只有......
  • OpenCV入门指南:开启计算机视觉之旅
    在计算机视觉领域,OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习软件库,它提供了丰富的图像处理与视觉识别功能,广泛应用于学术研究与工业界。一、OpenCV安装在开始之前,你需要安装OpenCV库。这里以Python环境为例进行说明:使用pip安装:打开你的......
  • 如何学习单片机:从入门到精通的全面指南
    摘要本文旨在为初学者提供一份系统的单片机学习指南,涵盖了从基础知识到进阶应用的各个方面。文章首先介绍了单片机的基本概念和架构,帮助读者理解单片机的工作原理和常见的单片机型号。接着,文章详细讲解了如何选择适合的单片机及其开发工具,并提供了一些入门和进阶学习的实用建......
  • java 入门教程(非常详细!1.6w+ 文字)
    先序:学习编程语言要先学个轮廓,刚开始只用学核心的部分,一些细节、不常用的内容先放着,现用现查即可;把常用的东西弄熟练了在慢慢补充。1.Java概述Java是一种面向对象的编程语言,由SunMicrosystems(现在的Oracle)在1995年推出。Java程序可以在任何支持Java虚拟机(J......
  • PHP8面向对象快速入门二 构造函数 析构函数 静态变量 静态方法
    在PHP中,构造函数是一个特殊的方法,用于在创建对象时初始化对象的状态。构造函数在对象实例化时自动调用,以设置初始值或执行必要的准备工作。它可以接受参数,用于初始化对象的属性。构造函数的特点自动调用:构造函数在创建对象时自动调用。你不需要显式调用构造函数,它会在实例......
  • 跑步装备的选购方法:从入门级到专业级的全面指南
    跑步是一项非常受欢迎的运动方式,它不仅能够锻炼身体,还能帮助人们放松心情。为了更好地享受跑步带来的乐趣,选择一款合适的跑步T恤至关重要。今天,我们就以“画跑”品牌的运动健身弹力跑步透气速干T恤为例,为大家介绍如何挑选最适合自己的跑步T恤。一、3D裁剪,贴合身形“画跑”的......
  • Goolge earth studio 入门6-渲染
    如果我们对现在生成的动画很满意,可以将其渲染出来,以便在EarthStudio之外查看它。点击渲染按钮,进入了渲染设置页面。1)可以更改文件名;默认情况下,它与我们的项目相同;2)还可以选择渲染的帧数,例如,如果我们只想渲染前180帧,可以在这里进行设置,会看到左侧的预览会更新。这是检查裁......