当前位置: 首页 > article >正文

博弈论3:图游戏SG函数(Graph Games)

目录

一、图游戏是什么

1.游戏特征

2.游戏实例

 二、图游戏的必胜策略

1.SG 函数(Sprague-Grundy Function)

2.必胜策略(利用SG函数)

3.拿走游戏转化成图游戏(Take-away Game -> Graph Game)


一、图游戏是什么

1.游戏特征

给出一个有向无环图G(X,F),其中X是游戏可抵达位置的非空集合(点集,设开始节点为x0∈X),F是一个函数(F(x)代表x的后继节点,即从x位置往下走一步能抵达的位置。若x为终点,F(x)为空集)。

  • 两个玩家,I&II,每轮交替行动。玩家I先行动,从开始节点x0出发。
  • 若当下处在位置x,可以选择走向一个位置y,其中y∈F(x).(即:若x->y有一条有向边,玩家可以从x走到y)
  • 先走到终点的玩家获胜

说白了就是有张“地图”,图上有一个又一个的节点,绘制着一条又一条的单向路径。两个人都从开始位置出发,轮流走一条路;谁先走到终点,谁获胜。

2.游戏实例

你和小红在同一起点x0.

你和小红每轮交替行动,每次可以走一条有向边。

你或小红的移动都会造成双方的移动(也就是说,如果你从x0走到x1,那么小红也走到了x1,她将从x1开始往下走)。

第一轮,你从x0走到x1;第二轮小红从x1走到x3;第三轮,你从x3走到终点x4。于是你光荣地获得了胜利。

 二、图游戏的必胜策略

然而,实际游戏中的图不会像示例的那么简单。那么怎么找到一个获胜策略呢?别急,我们先引入一个基本概念。

1.SG 函数(Sprague-Grundy Function

对于一个有向图G(X,F),我们定义一个SG函数g,  使得对于任意x∈X,都有

g(x)=min\{n\geqslant 0\,n\neq g(y)\ for y \epsilon f(x) \}

说人话,g(x) 是一个最小非负整数,这个非负整数不等于x所有后继节点的g(x)值(也就是SG值)。

显然,终点的SG值肯定为0(我们规定终点不会走向任何后继节点)。

于是求SG值,我们可以从终点开始求,再求只能抵达终点的那些点,再再求能抵达抵达终点的那些点的那些点...

ex.

2.必胜策略(利用SG函数)

事实上,SG值g(x)揭示了制胜策略:若行动后走到g(x)=0的点,一直行动下去就能获胜。

我们称g(x)=0的点为P位置,g(x)≠0的点为N位置。

P位置,即positions that are winning for the Previous player (the player who just moved),行动完走到这个位置的玩家获胜。

N位置,即 winning for the Next player to move,行动完之后走到这个位置,你的对手玩家(也就是下一轮行动的玩家)会获胜

终点一定是P位置;对于任何P位置,只能走到N位置;对于任何N位置,一定可以抵达其中一个P位置。(如果你想证明g(x)=0的点一定是P位置,也一定能获胜,可以利用这三条性质证明)

ex.

回到下面的图,我们观察到起点x0其实是一个P位置。(g(x0)=0)

假如你先行动,就只能走到N位置(x1或x3).

这时候,如果小红掌握了这个必胜策略,即每次移动都走到P位置(比如从x1走到P位置x2,从x3走到P位置x4),那么不管你采用什么策略,小红都会获胜。

3.拿走游戏转化成图游戏(Take-away Game -> Graph Game)

比如在下面博客中,我介绍了拿走游戏。

 博弈论1:拿走游戏(take-away game)-CSDN博客

拿走游戏就像是一个减法游戏,你只可以从原有数字上,选择其中一个指定的数字减去。谁先把数减到0.谁就获胜。而拿走游戏也可以转化成图游戏求解,如果通过指定的减法能从一个筹码数a变成另一个筹码数b.那么a到b之间就有一条有向边,b就是a的后继节点。

比如你和小红面前有17个筹码,每次能拿走1个或3个或4个。那么实际上就可以画出18个点,依次代表0,1,2,...,16,17.当筹码数为17时,能通过拿筹码使剩下筹码数变成16或14或13,于是从节点17到节点16、节点14、节点13就分别有一条有向边。

通过图游戏的转化,我们便可以计算SG值,从而求出g(x)=0的所有P位置,从而掌握制胜策略。比如图中,g(x)=0,g(1)=1,g(2)=0,g(3)= 1,g(4)=2,.....

计算到一定步骤,你会发现P位置其实是有规律的,比如这个图游戏中,P位置都是7k或7k+2的点。


http://www.kler.cn/a/442668.html

相关文章:

  • MC1.12.2 macOS高清修复OptiFine运行崩溃
  • Chatper 4: Implementing a GPT model from Scratch To Generate Text
  • 使用docker-compose安装Redis的主从+哨兵模式
  • 使用葡萄城+vue实现Excel
  • LeetCode 热题 100_从前序与中序遍历序列构造二叉树(47_105_中等_C++)(二叉树;递归)
  • 第423场周赛:检测相邻递增子数组 Ⅰ、检测相邻递增子数组 Ⅱ、好子序列的元素之和、统计小于 N 的 K 可约简整数
  • 使用 MyBatis-Plus Wrapper 构建自定义 SQL 查询
  • Spark内存都消耗在哪里了?
  • PHP与AJAX:实现动态网页的完美结合
  • 浏览器事件循环机制
  • PostgreSQL约束延迟生效
  • 消除图片中的浅色水印
  • sql server 数据库还原,和数据检查
  • jedis,lettuce,redisson对比
  • ARM CCA机密计算安全模型之固件启动
  • armsom产品编译烧录Linux固件
  • 群落生态学研究进展】Hmsc包开展单物种和多物种分析的技术细节及Hmsc包的实际应用
  • 使用rust语言创建python模块(pyo3+maturin)
  • spring RestTemplate使用说明
  • c语言中的信号处理:学习<signal.h>
  • 鸿蒙元服务项目实战:备忘录UI页面开发
  • 获取github容器注册表
  • 统计字符的个数C++
  • 正则表达式在线校验(RegExp) - 加菲工具
  • 微软商店错误提示的全方位解决方案
  • Vue项目的iconfont引入