博弈论初探——取石子游戏
2015-06-11 22:34
281 查看
问题源自于 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,(k\in N,0< t\leq m)\).那么A取走t个石子,则A的对手面对奇异局势,A赢。如果A面对奇异局势, A输。
第二种——威佐夫博弈
定义
两堆石子,分别为n个和m个,每次操作可以:从一堆石子里取走任意多个石子
从两堆石子里取走相同数目的任意多个石子
奇异局势
我们用 \((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\)。
性质
该奇异局势的数列有如下性质:任何自然数都包含在一个且仅有一个奇异局势中。
任意操作都可将奇异局势变为非奇异局势。
采用适当的方法,可以将非奇异局势变为奇异局势。
\(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 \),分两种情况:
第一种,\(a=a_ j (j < k)\),从第二堆里面拿走 \( b - b_ j \)即可;
第二种,\(a=b_ j (j < k)\) ,从第二堆里面拿走 \( b - a_ j\) 即可。
性质4: 证明待补充
第三种——尼姆博弈
待补充!相关文章推荐
- My learn of git
- 线程创建的方法(继承与接口)
- viewpager+Fragment结构,Fragment嵌套的Fragment显示不出来
- leetcode 020 Valid Parentheses(Python)
- 青岛市赛总结——远征石油大学
- 百度之星2015初赛(1)1003 HDOJ5248 序列变换(二分 贪心)
- Ubuntu搜狗输入法安装
- android 抽屉式侧滑菜单
- Javascript中构造函数的返回值问题和new对象的过程
- AI 笔记(一)
- 分层
- 学习时用的软件最新 开发环境为Visual Studio 2010,数据库为SQLServer2005,使用.net 4.0开发。 超市管理系统
- android事件分发
- Linux Shell编程之for循环结构
- 摘抄
- Centos6.0使用第三方YUM源(EPEL,RPMForge,RPMFusion)
- 快速排序
- 2015061101 - 寻找女儿国
- UIApplication
- c++ 实现五种基础的排序算法