zoukankan      html  css  js  c++  java
  • 博弈论初探——取石子游戏

    问题源自于 POJ1067

    关于取石子游戏

    取石子是一种很有意思的游戏,两个人根据指定规则轮流从石子堆中取若干石子,规定最后取光石子玩家获胜,假定双方玩家都采取最优策略,问先手(A)是否有什么必胜策略。

    这是一种博弈游戏,由此延伸出来了博弈论。科学严谨的定义详见维基百科博弈论条目。

    本文仅仅讨论最简单的三种博弈游戏。


    首先我们定义奇异局势为: 选手面对奇异局势时必输

    所以,对于博弈游戏的分析转化为寻找奇异局势。
    因为,因为如果A面对奇异局势必输,面对非奇异局势A必赢(因为按照一定的规律一定可以通过一步操作将非奇异局势转变为奇异局势,使得A的对手面对奇异局势)。

    第一种——巴什博弈

    定义

    一堆n个石子,两个人轮流从这堆石子里面取。每次最少一个,最多m个。取走最后石子的人获胜。

    奇异局势

    ( n = k*(m+1), k in N ^ * )
    也即:如果(n%(m+1)=0),n为奇异局势。

    证明

    如果A面对非奇异局势,则可以一定可以表示为(n=k*(m+1)+t,(kin N,0< tleq m)).
    那么A取走t个石子,则A的对手面对奇异局势,A赢。如果A面对奇异局势, A输。

    第二种——威佐夫博弈

    定义

    两堆石子,分别为n个和m个,每次操作可以:

    1. 从一堆石子里取走任意多个石子
    2. 从两堆石子里取走相同数目的任意多个石子

    奇异局势

    我们用 ((a_ k,b_ k), a_ k <= b_ k , k =0,1,2,cdots,n ) 表示两堆物品的数量并称其为局势,前几个奇异局势是:(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18),(12,20)。

    可以看出:

    1. (a_ 0=b_ 0=0)
    2. (a_ k)是未在前面出现过的最小自然数
    3. ( b_ k= a_ k + k)。

    性质

    该奇异局势的数列有如下性质:

    1. 任何自然数都包含在一个且仅有一个奇异局势中。
    2. 任意操作都可将奇异局势变为非奇异局势。
    3. 采用适当的方法,可以将非奇异局势变为奇异局势。
    4. (a_ k = [frac{sqrt{5}+1}{2} * k] ),[x]为向下取整。

    证明

    性质1:

    由于 (a_{k}) 是未在前面出现过的最小自然数,所以有 (a_{k}>a_{k-1}) 。
    而 ( b_k=a_k+k>a_{k-1}+(k-1)=b_{k-1}>a_{k-1})。
    所以性质1成立。

    性质2:

    • 事实上,若只改变奇异局势((a_k,b_k))的某一个分量,那么另一个分量不可能在其他奇异局势中,所以必然是非奇异局势。
    • 如果使((a_k, b_k))的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差,因此也是非奇异局势。
    • 所以性质1成立。

    性质3:

    • 假设面对的局势是(a, b),若 b = a,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0);
    • 如果( a = a_ k , b > b _ k),那么,取走( b-b _ k)个物体,即变为奇异局势;
    • 如果(a = a_ k , b < b_ k ),则同时从两堆中拿走 (a_k-a_{b-a_ k})个物体,变为奇异局势((a_{b-a_k},a_{b-a_k}+b-a_k));即变为奇异局势((a_ t, a_t-t)),其中 (t=b-a_k)
    • 如果( a > a_ k , b = a_ k + k),则从第一堆中拿走多余的数量(a-a_k) 即可;
    • 如果(a<a_k,b=a_k+k),分两种情况:
      1. 第一种,(a=a_ j (j < k)),从第二堆里面拿走 ( b - b_ j )即可;
      2. 第二种,(a=b_ j (j < k)) ,从第二堆里面拿走 ( b - a_ j) 即可。

    性质4: 证明待补充

    第三种——尼姆博弈

    待补充!

  • 相关阅读:
    定时日志清理
    python ros 订阅robot_pose获取机器人位置
    python ros 重新设置机器人的位置
    c 宏的定义
    dos与unix系统的格式转化
    robot_pose的类型
    ROS编译时(catkin_make)找不到bullet,Could NOT find Bullet (missing: BULLET_DYNAMICS_LIBRARY
    python 压缩tar 包
    python 文件分割
    python 千位分隔符,
  • 原文地址:https://www.cnblogs.com/SparkRat/p/4570374.html
Copyright © 2011-2022 走看看