博弈论入门

博弈论入门

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

公平组合游戏

定义:

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

Nim 游戏

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

n 堆石子,分别有 a1,a2,a3,a4...an 个石子,两个玩家分别取走任意一堆的任意个石子,但不能不取。取走最后一个石子的人获胜。

博弈图与状态

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

若将节点 (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(i=1nai) 的时间里求出该局面是否先手必赢。

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

定义 Nim=a1a2a3...an 。0

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

证明

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

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

  1. 没有后继状态的状态是 P
  2. 对于 a1a2...an0 的局面,一定存在某种移动使 a1a2...an=0
  3. 对于 a1a2...an=0 的局面,一定不存在某种移动使 a1a2...an=0

对于一,唯一无后继结点的状态为全0局面,此时 a1a2...an=0

对于二,假设 a1a2...an=k0 。设我们将 ai 改为 ajaj=aik 假设 k 的最高位为 dk[2d,dd+1) 。根据定义,一定有奇数个 ai 的二进制第 d 位为1。满足这个条件的 ai 一定也满足 aj>aik ,所以这是一个合法的移动。

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

有向图游戏和 SG 函数

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

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

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

mex(S)=min{x}(xS,xN)

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

对于状态 x 和他的所有 k 个后续 y1,y2,...,yk ,定义 SG 函数:

SG(x)=mex{SG(y1),SG(y2),...,SG(yk)}

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

这一定理被称为 SpragueGrundy 定理( SpragueGrundyTheorem ),简称 SG 定理。

SG 函数的证明

使用数学归纳法。

假设对于游戏状态 x ,其当前节点 s1,s2,...sn(isi<si) ,皆满足 SG 定理,显然当 SG(s1)=SG(s2)=...=SG(sn)=0 时,该状态能满足 SG 定理。

只需证明对于游戏状态 x ,当其节点 s1,s2,...sn 符合 SG 定理, SG 定理便成立。

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

SG 函数的应用

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

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

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

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

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

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

posted @   adsd45666  阅读(76)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示