有向图博弈问题

我们先了解一下公平组合游戏的适用范围(定义)

游戏满足:

 (1)2名玩家交替行动

 (2)任意时刻,可执行的合法行动与轮到哪名玩家无关

 (3)不能行动的玩家为输

再引入2中状态:

 P态:对于前一个玩家是必胜的

 N态:对于后一个玩家是必胜的

这里我们以取石子游戏为例,感受一下P态和N态

玩家2人,a颗石子,每次最少取1个,最多取b个,轮流取石子,最后取的人赢

0个石子显然是P态,而还剩1,2...b显然就是N态了......

所以我们可以结合定义得到,一个P态的后续状态一定都是N态,一个P态的后续状态一定都是N态

这样就简单了

对于任意的a和b,只要a%(b+1)!=0那么先手的人一定胜,否则一定败

除此之外,还有一个我们需要了解的东西,我个人认为很玄学,就是mex运算

具体就是,设S表示一个非负整数集合,mex(S)就是不属于S的最小非负整数

比mex更玄学的是SG函数:对于任意状态x,它的SG函数值为g(x)=mex{g(y)|y是x的后续状态}

SG有什么用呢?

结合上面,我们可以知道:如果我们能知道一个状态的SG值,那么我们就可以判断当前状态是N态还是P态

若SG值为0,则为P态,否则就是N态

  

接下来是一些常用博弈结论

1. 巴什博奕(Bash Game):

例如A:和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30

其实如果知道原理,这游戏一点运气成分都没有,只和先手后手有关,比如第一次报数,A报k个数,那么B报5-k个数,那么B报数之后问题就变为,A和B一块报数,看谁先报到25了,进而变为20,15,10,5,当到5的时候,不管A怎么报数,最后一个数肯定是B报的,可以看出,作为后手的B在个游戏中是不会输的

那么如果我们要报n个数,每次最少报一个,最多报m个,我们可以找到这么一个整数k和r,使n=k*(m+1)+r,代入上面的例子我们就可以知道,如果r=0,那么先手必败;否则,先手必胜

2. 威佐夫博弈(Wythoff Game):

有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利

结论:,若两堆物品的初始值为x和y,且x<y,则另z=y-x

记w=[((sqrt(5)+1)/2)*z ]

若w=x,则先手必败,否则先手必胜

3. 尼姆博弈(Nimm Game):

尼姆博弈指的是这样一个博弈游戏:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,最少取一件,取到最后一件物品的人获胜

结论就是:把每堆物品数全部异或起来,如果得到的值为0,那么先手必败,否则先手必胜

4. 斐波那契博弈:

有一堆物品,两人轮流取物品,先手最少取一个,至多无上限,但不能把物品取完,之后每次取的物品数不能超过上一次取的物品数的二倍且至少为一件,取走最后

一件物品的人获胜

结论是:先手胜当且仅当n不是斐波那契数(n为物品总数)

5.阶梯博弈
有 ? 堆石子放在 N 层阶梯上 • 每次选择一层的若干石子,放入下一层。(特别地,1 层的石子 就被扔掉)
结论:计算所有奇数层石子数的异或和,得到整个游戏的 SG

6.Moore’s Nim
现在,修改游戏规则,约定每次选择至多 K 堆石子,并从每一堆 中各取出任意多个石子
不能行动者负

结论:我们写出石子数的二进制,然后统计每一位中 ‘1’ 的个数之和 mod (? + 1) ,后手必胜当且仅当每一位 ‘1’ 的个数均为 ? + 1的倍数

上述结论对一般游戏的和不成立

7.Rim
? 堆石子 • 每次的操作是选择一堆石子,去掉其中至少一个,然后把此堆剩 下的石子划分成若干小堆
结论:这个游戏的 SG 函数和 Nim 完全相同

我们再来看一种题型:有向图游戏和,有以下定理:

有向图游戏的某个局面必胜,当且仅当该局面对应结点的SG函数值大于0

有向图游戏的某个局面必败,当且仅当该局面对应结点的SG函数值等于0

  

最后是一些扩展

除了上面提到的尼姆和,还有一些游戏可以通过一种叫尼姆积的运算求解SG函数

假如把尼姆游戏的取胜规则改为谁取走最后一个石子谁输的话(终止状态为N状态),先手必胜当且仅当

所有堆的石子数都为1且SG==0

有些堆的石子数大于1且SG!=0

以上知识整理于网络,自己的理解,参考《信息学奥赛一本通·提高篇》

转载于:https://www.cnblogs.com/xiaojuA/p/9841859.html

博弈论 从懵逼到入门 详解相关推荐

  1. 生成对抗网络入门详解及TensorFlow源码实现--深度学习笔记

    生成对抗网络入门详解及TensorFlow源码实现–深度学习笔记 一.生成对抗网络(GANs) 生成对抗网络是一种生成模型(Generative Model),其背后最基本的思想就是从训练库里获取很多 ...

  2. linux 日志按大小切割_nginx入门详解(六)- 日志切割

    上一章讲解了nginx的目录加密功能,本章重点介绍nginx的日志切割. 笨办法学linux:nginx入门详解(五)- 目录加密​zhuanlan.zhihu.com 在第二章,我们探讨了nginx ...

  3. python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...

  4. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

  5. python语言入门m-Python语言入门详解!快速学成Python!

    今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...

  6. python语言入门详解-python初级教程:入门详解

    python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...

  7. 【GCN】图卷积网络(GCN)入门详解

    机器学习算法与自然语言处理出品 @公众号原创专栏作者 Don.hub 单位 | 京东算法工程师 学校 | 帝国理工大学 图卷积网络(GCN)入门详解 什么是GCN GCN 概述 模型定义 数学推导 G ...

  8. python符号格式化设置区间_Python 数值区间处理_对interval 库的快速入门详解

    使用 Python 进行数据处理的时候,常常会遇到判断一个数是否在一个区间内的操作.我们可以使用 if else 进行判断,但是,既然使用了 Python,那我们当然是想找一下有没有现成的轮子可以用. ...

  9. 【JSON】JSON入门详解(二)

    文章目录 JSON基础文章荐读 JavaScript创建JSON对象 JSON与XML的那些事 JSON与XML的相同之处 JSON与XML的不同之处 AJAX相关JSON与XML JSON与XML的 ...

  10. python怎么安装myqr_python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...

最新文章

  1. FPGA之道(42)FPGA设计的分类
  2. Qt Creator Qt Quick用户界面表单ui-forms
  3. 当我们的代码遇到问题的时候....;要想不遇到问题,写代码的时候要.....
  4. win10共享打印错误0x0000006_Win10连接共享打印机提示0x80070035错误的解决办法
  5. Qt工作笔记-Qt移植到Linux上时提升窗口部件大小写问题(VS上存在的问题)
  6. Exchange 2007的自动发现
  7. Parallels Desktop 16 提示“已损坏,无法打开”的解决办法
  8. Aititi 特征点检测算法与匹配的前世今生与历史传承attilax总结v4
  9. 汇编语言王爽第四版第七章(实验六)
  10. wince +C#拼音码形成代码
  11. Gym 100781A Adjoin the Networks——树的直径
  12. 看《当幸福来敲门》观后感
  13. 腾讯实习生腾讯云后台一面面经
  14. position的4个值和用法
  15. 网易的java微专业_网易微专业Java高级架构师
  16. 使用Google Analytics(分析)进行用户体验研究的5种方法
  17. 基于组态王和三菱PLC的modbus仿真(七)——RS指令
  18. Python输入自己的姓名、地址,年龄,转化为另一种格式输出
  19. 轮盘赌算法-Roulette
  20. 编写各种outofmemory/stackoverflow程序

热门文章

  1. Hibernate组件作为Map索引(四)
  2. 【渝粤教育】国家开放大学2018年秋季 7048-21T危急重症护理学(本) 参考试题
  3. 【渝粤教育】电大中专建筑力学 (3)作业 题库
  4. Slider控件的使用方法
  5. 简单总结手机app测试,弱网测试
  6. Django 06模板语言的复用
  7. DOM基础操作(三)
  8. 【转】C语言条件编译及编译预处理阶段
  9. 【NLP】XLNet详解
  10. 怪不得知乎急着招前端开发.