650 字
3 分钟
谁来吃最后一块炸鸡?
前阵子跟两个朋友出去吃饭,最后还剩下一个鸡块谁都不想吃了。我想通过一个游戏决定这个鸡块的归属,但猜拳这种未免太老套,便随口设计了一个新颖的猜数游戏:
三人分别独立地写下一个零到一百之间(含端点)的整数。若他们两人的数相差小于 ,则我吃;否则,他们两人中离我的数更远的那个人吃。第二种情形下若距离相同,则他们两人中数字小的那个人吃。
在胡诌出规则的同时,我大脑飞速运转,试图找出一个占优的策略。然而这个问题似乎比我想像的要复杂,对面的两人也不见得比我更有头绪。最后,我胡乱地写下了数字 ,而对面两人分别给出了 和 。因为他们两人数字之差大于 ,我很幸运地免于硬塞下那最后的鸡块。游戏结束后我们三人就这个游戏是否存在占优策略争论了半个小时,不仅没讨论出什么结果,还因此错过了下大雨前赶回去的最后时机,被淋成了🐶。
回去之后我一直在想,这个看似简单的游戏,真的存在占优策略吗?我和几位朋友进行了多轮讨论,最后得出了一个出乎意料的结论。
为了方便讨论,我们对这个问题进行形式化的重新叙述。记 三个玩家分别写下了 ,则可按照下面的流程图判断鸡块的归属:
graph LR
%% 定义样式
classDef default fill:#7DCEA0,stroke:#333,stroke-width:2px
classDef eating fill:#F1948A,stroke:#333,stroke-width:2px
%% 起始节点
A("|y-z| ? 19")
class A default
%% 第一层逻辑
A -->|"<"| XEAT
A -->|">="| C1
C1("|y-x| ? |z-x|")
class C1 default
%% 第二层逻辑
C1 -->|"<"| YEAT
C1 -->|"="| C2
C1 -->|">"| ZEAT
C2("y ? z")
class C2 default
%% 第三层逻辑
C2 -->|"<"| YEAT
C2 -->|">"| ZEAT
%% 最右侧一列
XEAT("X 吃")
YEAT("Y 吃")
ZEAT("Z 吃")
class XEAT,YEAT,ZEAT eating
可以合理地假设每个玩家都会选定一个游戏策略。以玩家 为例,记他以 的概率写下数字 ,则其概率分布
可视为玩家 的一个策略,其满足 。给定三个玩家的策略,可以根据上面的流程图确定每位玩家不吃鸡块的概率。我们进一步假设,每个玩家都只希望最大化自己不吃鸡块的概率,而不关心其他事情。