算法分析与设计学习(5)——博弈论

博弈论

博弈树

  • 基本概念

    • 组合游戏论主要研究信息完全的双人轮流博弈的游戏。

    • 在组合游戏论中,博弈树是一个节点都表示一个游戏状态的有向图

      • 图中的有向边都是游戏中的某一步。

      • 一个完整的博弈树,包含了从初始游戏状态开始以及所有可达状态的所有可能的移动。

      • 博弈树中的叶子节点是指没有后继状态的节点。

        • 在叶子节点对应的状态中,由于双方都不能走,所以也被称为终止状态。

        在这里插入图片描述

        • 每个状态,即博弈树上的节点,都对应了一个游戏值,该游戏值为游戏双方从该局面出发以最优策略博弈后,己方所能获得的分数。
          • 假设当前状态轮到己方走,有多个可以选择的后继状态,那么一定选择游戏值最大的后继状态。称为 Max 状态。
          • 假设当前状态轮到对方走,有多个可以选择的后继状态,那么一定选择游戏值最小的后继状态。称为 Min 状态。
    • Alpha-Beta 剪枝

      • 在一个 Max 状态时,它的后继状态一定是一个 Min 状态,而如果当前这个 Max 状态的最大游戏值是X,而它的某个 Min 子状态中有一个子状态的值小于等于X,那么这个 Min 子状态一定不能更新 Max 状态。
  • 性质

    • Max 状态的子状态一定是 Min 状态。
    • Min 状态的子状态一定是 Max状态。

SG函数

  • 基本概念

    • 在公平的组合游戏中,可以把所有有可能出现的状态看作是图的节点
      • 如果从一个状态可以通过一步转移到达另一个状态,则在两点之间连一条有向边,这样就得到了一个状态图。
    • 假设游戏不会出现平局,即状态图是有向无环图的话,所有的状态可以分成两种,P 态和N态。
      • P 态表示该状态对于前一个玩家来说是必胜的
      • N 态表示该状态对于下一个玩家来说是必胜的
    • 一个状态被称为终止状态,如果当前状态下游戏不能再继续进行。
      • 在大部分的游戏规则中,终止状态都是P态。
      • 如果不加特殊说明,以下都假设终止状态为P态。
    • 任意一个 P态
      • 要么是一个终止状态
      • 要么它所有可以转移到的状态(后继状态)都是N态
    • 任意一个 N 态
      • 至少有一个后继状态是P态。
  • SG 函数

    • 对于任意状态 x x x,它的SG函数值 g ( x ) = m e x { g ( y ) ∣ y 是 x 的后续状态 } g(x)=mex\{g(y)|y是x的后续状态\} g(x)=mex{g(y)yx的后续状态},其中 m e x mex mex 是一个对于非负整数集合S的运算, m e x ( S ) mex(S) mex(S) S S S 中没有出现的最小非负整数。

      • 对于一个终止状态,因为它没有后继状态,所以它的SG函数值为0。
    • 例子:巴什博弈,一共有 6 6 6 个物品,两个人轮流取,一次最少取走 1 1 1 个最多取走 3 3 3 个,最后取光的人获胜。

      在这里插入图片描述

      • S i S_i Si表示还剩 i i i 个物品的状态。
        • S 0 S_0 S0 是终止状态,所以 g ( S 0 ) = 0 g(S_0)=0 g(S0)=0
        • S 1 S_1 S1 唯一的后继状态是 S 0 S_0 S0,所以 g ( S 1 ) = 1 g(S_1)=1 g(S1)=1
        • S 2 S_2 S2 可以转移到 S 0 S_0 S0 S 1 S_1 S1,所以 g ( S 2 ) = 2 g(S_2)=2 g(S2)=2
        • S 3 S_3 S3 可以转移到 S 0 S_0 S0 S 1 S_1 S1 S 2 S_2 S2,所以 g ( S 3 ) = 3 g(S_3)=3 g(S3)=3
        • 对于 S 4 S_4 S4 来说,它可以转移到 S 1 S_1 S1 S 2 S_2 S2 S 3 S_3 S3,三者的SG值分别为3、2、1,因此 g ( S 4 ) = 0 g(S_4)=0 g(S4)=0
        • 依次类推可以知道 g ( S 5 ) = 1 , g ( S 6 ) = 2 g(S_5)=1,g(S_6)=2 g(S5)=1,g(S6)=2​。
    • 对于一个状态,如果这个状态的SG值等于 0,那么这个状态是P态,否则就是N态。

Nim游戏和Nim和

  • Nim游戏
    • 游戏介绍:
      • Nim 游戏是一个公平的组合游戏。
      • 游戏开始时有 n n n​ 堆石子,两个玩家轮流挑选一堆石子,并从中取走若干个,最后不能再取的就是输家。
    • SG函数计算
      • 用一个 n n n 维向量 a = ( a 1 , a 2 , … , a n ) a=(a_1,a_2,…,a_n) a=(a1,a2,,an) 表示任意一个游戏局面,其中 a i a_i ai 表示的是第 i i i​ 堆石子当前还剩多少个。
      • 对于当前状态 a = ( a 1 , a 2 , … , a n ) a=(a_1,a_2,…,a_n) a=(a1,a2,,an)
        • 如果 a 1 ⊕ a 2 ⊕ … ⊕ a n = 0 a_1\oplus a_2\oplus …\oplus a_n=0 a1a2an=0,则为 P 态,否则为 N 态
        • 其中 $\oplus $​ 运算符表示的是按位异或操作
      • 正确性证明
        • 如果 a 1 ⊕ a 2 ⊕ … ⊕ a n = 0 a_1\oplus a_2\oplus …\oplus a_n=0 a1a2an=0,则要么这是一个终止状态,要么该状态的所有后继状态等式都不成立。
        • 如果 a 1 ⊕ a 2 ⊕ … ⊕ a n ≠ 0 a_1\oplus a_2\oplus …\oplus a_n\ne0 a1a2an=0,则该状态一定可以转移到某个能让等号成立的后继状态。
  • Nim和
    • 称一个游戏 G G G 是一组游戏 G 1 , G 2 , … , G n G_1,G_2,…,G_n G1,G2,,Gn 的和,如果 G G G 的每一步可以抽象成:先挑选一个子游戏 G i G_i Gi,然后在 G i G_i Gi​中走一步。
    • 如果函数 g i g_i gi G i G_i Gi 的SG函数,则游戏 G G G 的SG函数 g = g 1 ⊕ g 2 ⊕ … ⊕ g n g=g_1\oplus g_2\oplus …\oplus g_n g=g1g2gn,即对G的任意状态 a = ( a 1 , a 2 , … , a n ) a=(a_1,a_2,…,a_n) a=(a1,a2,,an) g ( a ) = g 1 ( a 1 ) ⊕ g 2 ( a 2 ) ⊕ … ⊕ g n ( a n ) g(a)=g_1(a_1)\oplus g_2(a_2)\oplus …\oplus g_n(a_n) g(a)=g1(a1)g2(a2)gn(an)
  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值