三种经典博弈(取石子问题)

这篇具有很好参考价值的文章主要介绍了三种经典博弈(取石子问题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

三种经典博弈(取石子问题)

博弈是有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。


巴什博奕

有一堆 n n n 个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取 m m m 个。最后取光者得胜。

显然,如果 n = m + 1 n=m+1 n=m+1,那么由于一次最多只能取 m m m 个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。

因此我们发现了如何取胜的法则:如果 n = ( m + 1 ) r + s n=(m+1)r+s n=(m+1)r+s,( r r r 为任意自然数, s ≤ m s\leq m sm),那么先取者要拿走 s s s 个物品,如果后取者拿走 k k k ≤ m \leq m m)个,那么先取者再拿走 m + 1 − k m+1-k m+1k 个,结果剩下 ( m + 1 ) ( r − 1 ) (m+1)(r-1) (m+1)(r1) 个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下 ( m + 1 ) (m+1) (m+1) 的倍数,就能最后获胜。

这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到 100 100 100 者胜。


威佐夫博奕

有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

这种情况下是颇为复杂的。我们用 ( a k , b k ) (a_k,b_k) (ak,bk) ( a k ≤ b k , k = 0 , 1 , 2 , … , n ) (a_k \leq b_k, k=0,1,2,\ldots,n) (akbk,k=0,1,2,,n) 表示两堆物品的数量并称其为局势,如果甲面对 ( 0 , 0 ) (0,0) (0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是: ( 0 , 0 ) (0,0) (0,0) ( 1 , 2 ) (1,2) (1,2) ( 3 , 5 ) (3,5) (3,5) ( 4 , 7 ) (4,7) (4,7) ( 6 , 10 ) (6,10) (6,10) ( 8 , 13 ) (8,13) (8,13) ( 9 , 15 ) (9,15) (9,15) ( 11 , 18 ) (11,18) (11,18) ( 12 , 20 ) (12,20) (12,20)。(统计小规模数据)

可以看出, a 0 = b 0 = 0 a_0=b_0=0 a0=b0=0 a k a_k ak 是未在前面出现过的最小自然数,而 b k = a k + k b_k= a_k + k bk=ak+k。发现规律,得到猜想。

奇异局势有如下三条性质:

  1. 任何自然数都包含在一个且仅有一个奇异局势中。

由于 a k a_k ak 是未在前面出现过的最小自然数,所以只需证明 b k b_k bk 不会出现在前面的奇异局势中即可。由于 a k > a k − 1 a_k > a_{k-1} ak>ak1,而 b k = a k + k > a k − 1 + ( k − 1 ) = b k − 1 > a k − 1 b_k= a_k + k > a_{k-1} + (k-1) = b_{k-1} > a_{k-1} bk=ak+k>ak1+(k1)=bk1>ak1。所以性质 1 成立。(从第 0 项到第 k k k 项, a k a_k ak 是递增的;由于 b k = a k + k b_k=a_k+k bk=ak+k,所以 b k b_k bk 也是递增的。)

  1. 任意操作都可将奇异局势变为非奇异局势。

事实上,若只改变奇异局势 ( a k , b k ) (a_k,b_k) (ak,bk) 的某一个分量,那么另一个分量不可能在其他奇异局势中(性质 1),所以必然是非奇异局势。如果使 ( a k , b k ) (a_k,b_k) (ak,bk) 的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差(因为 k k k 是递增的,所以每个奇异局势对应唯一一个差),因此也是非奇异局势。

  1. 采用适当的方法,可以将非奇异局势变为奇异局势。

假设面对的局势是 ( a , b ) (a,b) (a,b) (设 a ≤ b a\leq b ab,否则先交换 a a a b b b),若 b = a b=a b=a,则同时从两堆中取走 a a a 个物体,就变为了奇异局势 ( 0 , 0 ) (0,0) (0,0);如果 a = a k a=a_k a=ak b > b k b>b_k b>bk,那么,取走 b − b k b-b_k bbk 个物体,即变为奇异局势;如果 a = a k a=a_k a=ak b < b k b<b_k b<bk,则同时从两堆中拿走 a k − a b − a k a_k-a_b-a_k akabak 个物体,变为奇异局势 ( a b − a k , a b − a k + b − a k ) (ab-a_k,ab-a_k+b-a_k) (abak,abak+bak);如果 a > a k a>a_k a>ak b = a k + k b=a_k+k b=ak+k,则从第一堆中拿走多余的数量 a − a k a-a_k aak 即可;如果 a < a k a<a_k a<ak b = a k + k b=a_k+k b=ak+k,分两种情况,第一种, a = a j a=a_j a=aj j < k j<k j<k),从第二堆里面拿走 b − b j b-b_j bbj 即可;第二种, a = b j a=b_j a=bj j < k j<k j<k),从第二堆里面拿走 b − a j b-a_j baj 即可。

从如上性质可知,两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜;反之,则后拿者取胜。
给定一个局势 ( a , b ) (a,b) (a,b),如何判断它是否为奇异局势呢?我们可以使用以下公式:

a k = ⌊ k ( 1 + 5 ) / 2 ⌋ , b k = a k + k ( k = 0 , 1 , 2 , … , n ) a_k = \left\lfloor k\left(1+\sqrt{5}\right)/2 \right\rfloor, \quad b_k = a_k + k \quad (k=0,1,2,\ldots,n) ak=k(1+5 )/2,bk=ak+k(k=0,1,2,,n)

其中, ⌊ x ⌋ \lfloor x \rfloor x 表示取整函数。有趣的是,公式中出现了黄金分割数 ( 1 + 5 ) / 2 = 1.618 … (1+\sqrt{5})/2 = 1.618\ldots (1+5 )/2=1.618,因此由 a k a_k ak b k b_k bk 组成的矩形近似为黄金矩形。我们可以先求出 j = ⌊ a ( 5 − 1 ) / 2 ⌋ j = \lfloor a(\sqrt{5}-1)/2 \rfloor j=a(5 1)/2,然后判断:

  • a = a j a = a_j a=aj,则 a a a 是奇异局势, b = a j + j b = a_j + j b=aj+j
  • a = a j + 1 a = a_{j+1} a=aj+1,则 a j + 1 a_{j+1} aj+1 是奇异局势, b = a j + 1 + j + 1 b = a_{j+1} + j + 1 b=aj+1+j+1
  • 否则,继续按照上述方法进行判断,直到找到奇异局势或者判断结束。

另一种判断方法是:给定 ( a , b ) (a,b) (a,b) a < b a<b a<b),先计算 k = b − a k = b - a k=ba,然后根据 k k k 计算 a k a_k ak b k b_k bk。如果 a k = a a_k = a ak=a b k = b b_k = b bk=b,那么 ( a , b ) (a,b) (a,b) 是奇异局势,否则不是。


尼姆博奕

有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况最有意思,它与二进制有密切关系,我们用 ( a , b , c ) (a,b,c) (a,b,c) 表示某种局势,首先 ( 0 , 0 , 0 ) (0,0,0) (0,0,0) 显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是 ( 0 , n , n ) (0,n,n) (0,n,n),只要与对手拿走一样多的物品,最后都将导致 ( 0 , 0 , 0 ) (0,0,0) (0,0,0)。仔细分析一下, ( 1 , 2 , 3 ) (1,2,3) (1,2,3) 也是奇异局势,(我先拿之后,)无论对手如何拿,接下来都可以变为 ( 0 , n , n ) (0,n,n) (0,n,n) 的情形。

计算机算法里面有一种叫做按位模 2 加,也叫做异或的运算,我们用符号 ( + ) (+) (+) 表示这种运算。这种运算和一般加法不同的一点是 1 + 1 = 0 1+1=0 1+1=0。先看 ( 1 , 2 , 3 ) (1,2,3) (1,2,3) 的按位模 2 加的结果:

1 = 二进制  01 2 = 二进制  10 3 = 二进制  11 1  (+)  2  (+)  3 = 0  (注意不进位) 1 = \text{二进制 } 01 \\ 2 = \text{二进制 } 10 \\ 3 = \text{二进制 } 11 \\ 1 \text{ (+) } 2 \text{ (+) } 3 = 0 \text{ (注意不进位)} 1=二进制 012=二进制 103=二进制 111 (+) 2 (+) 3=0 (注意不进位)

对于奇异局势 ( 0 , n , n ) (0,n,n) (0,n,n) 也一样,结果也是 0 0 0。任何奇异局势 ( a , b , c ) (a,b,c) (a,b,c) 都有 a  (+)  b  (+)  c = 0 a \text{ (+) } b \text{ (+) } c = 0 a (+) b (+) c=0

如果我们面对的是一个非奇异局势 ( a , b , c ) (a,b,c) (a,b,c),要如何变为奇异局势呢?假设 a < b < c a < b < c a<b<c,我们只要将 c c c 变为 a  (+)  b a \text{ (+) } b a (+) b 即可,因为有如下的运算结果:

a  (+)  b  (+)  ( a  (+)  b ) = ( a  (+)  a )  (+)  ( b  (+)  b ) = 0  (+)  0 = 0 a \text{ (+) } b \text{ (+) } (a \text{ (+) } b) = (a \text{ (+) } a) \text{ (+) } (b \text{ (+) } b) = 0 \text{ (+) } 0 = 0 a (+) b (+) (a (+) b)=(a (+) a) (+) (b (+) b)=0 (+) 0=0

要将 c c c 变为 a  (+)  b a \text{ (+) } b a (+) b,只要从 c c c 中减去 c − ( a  (+)  b ) c-(a \text{ (+) } b) c(a (+) b) 即可。文章来源地址https://www.toymoban.com/news/detail-475441.html

到了这里,关于三种经典博弈(取石子问题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【激励机制】一种去中心化和中心化的reputation的博弈论自洽激励

    先上一幅Swarm Learning 的架构图镇楼 我们希望实现 激励的可协调 ,也就是让每个节点可以可信地分享reputation的信息 我们引进 可转移支付 方案,让节点可信地共享reputation信息 我们还通过密码学的方法整合reputation信息 1.如果节点报告reputation信息,别人就会掌握有利的信息,

    2023年04月12日
    浏览(42)
  • 租用游艇问题 石子合并问题 动态规划实验

    实验名称:                动态规划                          一、实验预习 1、实验目的 1. 理解并掌握动态规划方法的设计思想; 2. 提高应用动态规划方法解决问题和设计算法的能力; 3. 通过编程实现租用游艇问题和石子合并问题,进一步理解动态规划方

    2024年02月07日
    浏览(48)
  • 石子合并系列问题

    石子合并问题在网上有三个版本: AcWing 282. 石子合并 设有 N 堆石子排成一排,其编号为 1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆

    2024年02月02日
    浏览(59)
  • 石子合并问题(动态规划)

    石子合并问题是一个经典的动态规划问题,应用了最优子结构和重复子问题的思想。 (1)有N堆石子,现要将石子有序的合并成一堆,规定如下:每次只能移动任意的2堆石子合并,合并花费为新合成的一堆石子的数量。求将这N堆石子合并成 (动态规划)O(n^3) 设dp[i][j]表示将i至j之

    2024年02月06日
    浏览(47)
  • 【动态规划】之石子合并问题

    在一个操场上一排地摆放着N堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。请设计一个程序,计算出将N堆石子合并成一堆的最小得分和最大得分。 我们对n的取值逐步分析 当n=1时,没有进

    2024年04月28日
    浏览(37)
  • 【博弈论基础与几大经典模型】古诺模型、斯塔克尔伯格模型Stackelberg Game、价格领导模型、Bertrand模型、Sweezy模型

    最近阅读了一篇paper中用到了Stackelberg Game建模,于是找了一些资料先学习以下该模型的理论知识,发现很多学科都是相关的,真是神奇的存在。 博弈论(Game theory)又称为对策论,是理性个体之间战略对策的数学模型的研究。通过建立思维模型分析战略游戏中个体的行为,并且

    2024年02月04日
    浏览(56)
  • 人工智能:一种现代的方法 第三章 经典搜索 上

    3.1 问题求解智能体 环境假设:单Agent、确定的、可观察的、离散的、已知的 问题求解智能体的工作流程通常如下: 目标设定 :首先,问题求解智能体需要有一个明确的目标或需要解决的问题。 问题形式化 :然后,智能体需要将这个目标或问题形式化为一个搜索问题。这通

    2024年02月05日
    浏览(51)
  • Flask的一种启动方式和三种托管方式

    Flask 支持使用原生的 app.run() 方法来启动应用程序。这种方法是最简单、最基本的启动方式,适用于开发环境和小型应用程序。 以上代码定义了一个简单的 Flask 应用程序,其中一个路由 / 映射到了一个名为 hello_world() 的视图函数。在最后一行,我们通过 app.run() 方法启动了应

    2024年02月06日
    浏览(35)
  • 测量鼠标DPI的三种方法,总有一种适合你

    DPI(dots per inch)代表每英寸点数,是一种用于各种技术设备(包括打印机)的测量方法,但对于鼠标来说,指的是鼠标在桌面上移动1英寸的距离的同时,鼠标光标能够在屏幕上移动多少“点”。 许多游戏鼠标都有按钮,可以让你在玩游戏时动态切换DPI,但如果你不知道鼠标

    2024年01月16日
    浏览(43)
  • 纸牌博弈问题--动态规划(java)

    给定一个整型数组arr, 代表数值不同的纸牌排成一条线 玩家A和玩家B依次拿走每张纸牌 规定玩家A先拿, 玩家B后拿 但是每个玩家每次只能拿走最左或最右的纸牌 玩家A和玩家B都绝顶聪明 (都在拿最优解) 请返回最后获胜者的分数 解题思路. 递归就是可虑所有可能性,然后比较

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包