取石子游戏,程序员用博弈论教你如何必胜

1.游戏规则

有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子(至少取1个)。
取石子游戏,程序员用博弈论教你如何必胜_第1张图片每次有两种不同的取法,规则如下:
1.一是可以在任意的一堆中取走任意多的石子;取石子游戏,程序员用博弈论教你如何必胜_第2张图片2.二是可以在两堆中同时取走相同数量的石子。
取石子游戏,程序员用博弈论教你如何必胜_第3张图片最后把石子全部取完者为胜者,假设双方都采取最好的策略,给定初始数量,你是否有必胜的把握?

2.分析

为方便描述,设 表示两堆石子数量分别为 ,且你先取。
1. 表示必胜
2. 表示必败
3.石堆没有顺序优先级,所以

2.1首先分析3种特殊情况

1.两堆石子数量一样,两堆都取 个,必胜,得 取石子游戏,程序员用博弈论教你如何必胜_第4张图片2.只有一堆石子,一堆取 个,必胜,得 取石子游戏,程序员用博弈论教你如何必胜_第5张图片3.石子数量为 ,只能取(1,0),(2,0),(1,1),剩下石子为(1,1),(0,1),(1,0)对方都能胜,所以必败,得 ,称此为奇异局势(必败局势)。取石子游戏,程序员用博弈论教你如何必胜_第6张图片

2.2列出前面的几种情况如下:

取石子游戏,程序员用博弈论教你如何必胜_第7张图片

可以得到如下规律:

  • 奇异局势有,必败

  • 蓝色为先取的数量,一次就可以将状态转为奇异局势,必胜

  • 都可以转为 ,必胜

  • 都可以转为 ,必胜

  • 可以转化为 的奇异局势,而且 也可以转化为

即奇异局势为,且 不能重复出现
结论:如果两个人都采取最优策略,面对非奇异局势,先拿必胜;面对奇异局势,后拿必胜。

3.理论推广

这个其实是经典的威佐夫博弈问题,但首先我们先介绍另一个定理,贝蒂定理。

3.1贝蒂定理

设 是正无理数,且 。
记,( 为取整函数)。
则 是 的一个划分, 。

证明如下

1.任一个整数至多在集合P或Q中出现一次。

,对于不同整数 各不相同。

2. (反证法)

假设 ,则存在正整数 使得 ,

, ,
两式相加得
,与 为整数矛盾。

3. (反证法)

假设 , 则存在正整数 使得,
由此得 (因为a是无理数),
类似有

两式相加得
,与 为整数矛盾。

3.2回归威佐夫问题

设奇异局势构成的序列组为 , 即为通项公式,可以看出 是一个贝蒂序列。
设 ,
因为,即 。
代入 ,得 。
即 。
而 。

3.3如何快速判断

给定一个局势 ,得 ,
如果 ,则是奇异局势,否则不是。

3.4例题

poj1067:http://poj.org/problem?id=1067

3.5代码实现

const double q = (1 + sqrt(5.0)) / 2.0;

bool isWythoff(int a, int b) {

    int t;
    if (a > b) t = a, a = b, b = t;
    return (int) ((b - a) * q) == a;

}

扫描下方二维码关注公众号,第一时间获取更新信息!

取石子游戏,程序员用博弈论教你如何必胜_第8张图片

你可能感兴趣的:(游戏,博弈论,算法,svg,js)