阿里尔、比阿特丽斯和卡桑德拉三位杰出的游戏理论家在一次游戏理论会议上感到无聊(我们知道这很令人震惊),于是设计了下面的游戏来打发时间。 他们画了一条数字线,把1放在1上,把2放在2上,把3放在3上,以此类推,把10放在10上。
每个玩家都有一个个性化的令牌。 他们轮流把代币放在其中一个钱币堆上(每个空格只允许一个代币),阿里尔第一,碧翠丝第二,卡桑德拉第三。 一旦所有的代币都放好了,每个玩家都可以获得她代币所在的或最近的每一个堆栈。如果堆栈位于两个代币之间,玩家就可以平分现金。
这场比赛结果如何? 先去值多少钱?
额外的积分:如果游戏不是在数字线上玩,而是在时钟上玩,值从1美元到12美元,该怎么办? 如果苔丝狄蒙娜、埃莉诺等加入了最初的游戏怎么办? 如果代币可以放在数字线上的任何位置,而不仅仅是堆栈上,那会怎么样?
给定一个策略$(a,b,c)$,让我们将Ariel的支出称为$P_a(a,b,c)$。 同样,我们将比阿特丽斯和卡桑德拉的支出分别称为$P_B$和$P_C$。 想象一下,轮到卡桑德拉了。 她观察了阿里尔和比阿特丽斯的动作。 对于每个$c$的潜在选择,我们可以计算卡桑德拉的支出$P_c(a,b,c)$,然后选择$c$中最赚钱的选择。 让我们把卡桑德拉的战略称为$K_C(a,b)$。 数学上,我们定义: \[ K_C(a,b)=\arg\max_{C}P_C(a,b,C) \] 现在想象一下,该轮到比阿特丽斯了。 她观察了阿里尔的举动($a$)。 她还知道,如果她选择$b$,那么卡桑德拉将继续使用$K_C(a,b)$。 因此,她必须选择最好的$b$,以预测卡桑德拉会做什么。如果我们将比阿特丽斯的策略称为$K_b(a)$,那么我们有: \[ K_B(a)=\arg\max_{B}P_B(a,B,K_C(a,B)) \] 最后,想象一下轮到阿里尔了。 尽管她是第一个搬家的人,但不管她选择哪一个$a$,可以肯定的是,Beatrice将选择$b=K_b(a)$,而Cassandra将继续选择$c=K_c(a,b)$。 所以Ariel可以检查所有选项并预测她的支出。 最终,她的决定将是$K_A$,由以下人员给出: \[ K_A=\arg\max_{A}P_A(A,K_B(A),K_C(A \]
计算细节
随着问题的扩大,上述步骤的天真实现很快在计算上变得棘手。 如果有$N$钱币堆和$M$玩家,可能的策略数量是$N(N-1)\cdots(N-M+1)$,这可能相当大。因此,如果$N=12$和$M=9$,最后一个玩家的$K$函数将取决于前8$玩家的移动方式,并且有大约2000万种可能性。 随着我们进一步增加$N$或$M$,情况迅速恶化。 我注意到,对任何球员来说,最好的移动都不取决于之前球员的移动顺序。 因此,为了实现函数$K_A$、$K_B$等,我们可以假设输入已排序。 这将可能的策略数量减少到$\binom{N}{M}$。 所以在上面的例子中,2000万个可能性减少到500个,这是一个更容易管理的数字。 最佳解决方案可能不是唯一的。 在每一步中,可能会有几个选择为决定玩家产生相同的支出。 跟踪所有可能性是很繁琐的,因为这意味着每个$\arg\max$都可以返回许多解决方案,并且每个解决方案都必须通过其他函数传播回来。 我使用策略列表实现了递归,所以在每一步我都会传递最优策略列表,而不仅仅是一个策略。 延期和奖金问题。 经过一番思考,我编写的代码只需稍作修改就可以解决额外的问题。 使用$N$和$M$编写通用代码可以轻松添加更多堆栈或播放器。 写数字行使其环绕(在时钟上)就等于重新定义了计算每个策略的支出的函数。 解决连续版本相当于在堆栈之间添加额外的插槽,并适当地重新定义支付函数。 漏洞。 这么多虫子! 这是我最近编写的最棘手的代码,至少可以说,跟踪递归中的索引错误是一个挑战。 我想我最终把一切都做好了,我很满意!