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

news2024/12/19 22:50:50

目录

一、图游戏是什么

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.coloradmin.cn/o/2262392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0101多级nginx代理websocket配置-nginx-web服务器

1. 前言 项目一些信息需要通过站内信主动推动给用户,使用websocket。web服务器选用nginx,但是域名是以前通过阿里云申请的,解析ip也是阿里云的服务器,甲方不希望更换域名。新的系统需要部署在内网服务器,简单拓扑图如…

qt-C++笔记之自定义类继承自 `QObject` 与 `QWidget` 及开发方式详解

qt-C笔记之自定义类继承自 QObject 与 QWidget 及开发方式详解 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QW…

Elastic 8.17:Elasticsearch logsdb 索引模式、Elastic Rerank 等

作者:来自 Elastic Brian Bergholm 今天,我们很高兴地宣布 Elastic 8.17 正式发布! 紧随一个月前发布的 Elastic 8.16 之后,我们将 Elastic 8.17 的重点放在快速跟踪关键功能上,这些功能将带来存储节省和搜索性能优势…

[C++]类的继承

一、什么是继承 1.定义: 在 C 中,继承是一种机制,允许一个类(派生类)继承另一个类(基类)的成员(数据和函数)。继承使得派生类能够直接访问基类的公有和保护成员&#xf…

Docker 用法详解

文章目录 一、Docker 快速入门1.1 部署 MYSQL1.2 命令解读: 二、Docker 基础2.1 常见命令:2.1.1 命令介绍:2.1.2 演示:2.1.3 命令别名: 2.2 数据卷:2.2.1 数据卷简介:2.2.2 数据卷命令&#xff…

【自动化】Python SeleniumUtil 油猴 工具 自动安装用户脚本

【自动化】Python SeleniumUtil 油猴 工具 【自动化】Python SeleniumUtil 工具-CSDN博客【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565691 油猴工具 import timefrom selenium.webdriver.support.wait import WebDriverW…

盛元广通畜牧与水产品检验技术研究所LIMS系统

一、系统概述 盛元广通畜牧与水产品检验技术研究所LIMS系统集成了检测流程管理、样品管理、仪器设备管理、质量控制、数据记录与分析、合规性管理等功能于一体,能够帮助实验室实现全流程的数字化管理。在水产、畜牧产品的质检实验室中,LIMS系统通过引入…

clickhouse-数据库引擎

1、数据库引擎和表引擎 数据库引擎默认是Ordinary,在这种数据库下面的表可以是任意类型引擎。 生产环境中常用的表引擎是MergeTree系列,也是官方主推的引擎。 MergeTree是基础引擎,有主键索引、数据分区、数据副本、数据采样、删除和修改等功…

GEE+本地XGboot分类

GEE本地XGboot分类 我想做提取耕地提取,想到了一篇董金玮老师的一篇论文,这个论文是先提取的耕地,再做作物分类,耕地的提取代码是开源的。 但这个代码直接在云端上进行分类,GEE会爆内存,因此我准备把数据下…

Docker搭建kafka环境

系统:MacOS Sonoma 14.1 Docker版本:Docker version 27.3.1, build ce12230 Docker desktop版本:Docker Desktop 4.36.0 (175267) 1.拉取镜像 先打开Docker Desktop,然后在终端执行命令 docker pull lensesio/fast-data-dev …

校园点餐订餐外卖跑腿Java源码

简介: 一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合&am…

Linux文件属性 --- 硬链接、所有者、所属组

三、硬链接数 1.目录 使用“ll”命令查看,在文件权限的后面有一列数字,这是文件的硬链接数。 对于目录,硬链接的数量是它具有的直接子目录的数量加上其父目录和自身。 下图的“qwe”目录就是“abc”目录的直接子目录。 2.文件 对于文件可…

Centos7 部署ZLMediakit

1、拉取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init 2、安装编译器 sudo yum -y install gcc 3、安装cmake sudo yum -y install cmake 4…

无管理员权限 LCU auth-token、port 获取(全网首发 go)

一: 提要: 参考项目: https://github.com/Zzaphkiel/Seraphine 想做一个 lol 查战绩的软件,并且满足自己的需求(把混子和大爹都表示出来),做的第一步就是获取 lcu token ,网上清一色…

《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制

从本节课程开始,我们将来介绍K8s安全框架,这是保障K8s集群安全比较关键的安全机制。接下来,让我们一起来探索K8s安全框架的运行机制。 在这个课程中,我们将学习以下内容: K8s安全框架:由认证、鉴权和准入控…

spring\strust\springboot\isp前后端那些事儿

后端 一. 插入\更新一条数据&#xff08;老&#xff09; Map<String, Object> parameterMap MybatisUtil.initParameterSave("Send_ProjectFrozenLog", sendProjectFrozenLog); commonMapper.insert(parameterMap);parameterMap MybatisUtil.initParameter…

UE5安装Fab插件

今天才知道原来Fab也有类似Quixel Bridge的插件&#xff0c;于是立马就安装上了&#xff0c;这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎&#xff0c;在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…

对于使用exe4j打包,出现“NoClassDefFoundError: BOOT-INF/classes”的解决方案

jar使用exe4j打包exe&#xff0c;出现NoClassDefFoundError: BOOT-INF/classes 注意选取的jar包是使用build&#xff0c;而不是maven中的install 本文介绍解决这个方法的方案 点击Project Structure 按照如图所示选择 选择main class&#xff0c;选择你要打的main 如果遇到/M…

文件上传之文件内容检测

一.基本概念 介绍&#xff1a;文件内容检测就是检测上传的文件里的内容。 文件幻数检测 通常情况下&#xff0c;通过判断前10个字节&#xff0c;基本就能判断出一个文件的真实类型。 文件加载检测 一般是调用API或函数对文件进行加载测试。常见的是图像渲染测试&#xff0c;再…

WebSpoon9.0(KETTLE的WEB版本)编译 + tomcatdocker部署 + 远程调试教程

前言 Kettle简介 Kettle是一款国外开源的ETL工具&#xff0c;纯Java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;绿色无需安装&#xff0c;数据抽取高效稳定 WebSpoon是Kettle的Web版本&#xff0c;由Kettle社区维护&#xff0c;不受Pentaho支持&#xff0c;…