起初,问题似乎是在问不可能的事情。在公平的硬币上翻来翻去,除了赢得一半的时间之外,还能带来什么?这里的关键是,“获胜”只需要获得积极的分数。如果我们看100次投掷后的“预期总分”,无论使用什么策略,这都是0(你可以通过应用期望线性). 但由于我们计算的是积极结果的数量,而不是总分,所以平均有一半以上的时间是有可能获胜的。
作为一个简单的例子,考虑一个你掷骰子的游戏。如果你得到1,你就会损失5美元。但如果你得到其他东西,你就赢了1美元。游戏中的预期分数是$\tfrac{1}{6}(-5)+\tfrac}5}{6{(+1)=0$。然而,如果“赢”仅仅意味着获得一个正分数,那么我们就赢了$\tfrac{5}{6}$。翻转游戏是类似的;我们的总分可以平均为零,即使在超过一半的时间里都是正数。实际上,这意味着当我们真的输了,我们就会损失惨重。
假设最优游戏的获胜概率
假设我们正在进行$N$翻转,我们在以下两个选项中进行选择:
- 投币$A$:以概率$A$赢$+1$,以概率$1-A$赢$-1$。
- 投币$B$:以大约$B$赢得$+2$,以大约$1-B$赢得$-2$。
我们的任务是确定如果我们优化策略,我们将赢得的比赛的百分比。一种方法是使用动态规划基本思想是,我们在比赛中任何时候的最佳动作都应该取决于(1)我们当前的得分和(2)我们还剩多少步。因此,我们定义:
\[
V_t(s)=\left\{\begin{aligned}
&\文本{如果我们玩得最优,我们获胜的概率}\\
&\文本{从这里开始,考虑到我们当前的分数}\\
&\text{is}s\text{我们现在轮到}t\text{of}N
\结束{对齐}\右。
\]我们可以将每个$V_t$视为一个向量,该向量由$s\in\{dots,-1,0,1,\dots\}$索引,这是我们的当前分数。我们的想法是通过从最后一步开始反向计算,直到达到$V_0$,即我们在每个不同的起始分数中获胜的概率,来求解每个$V_t$。最终,问题是要求我们计算$V_0(0)$。
终端分布简单地由我们在获得给定最终分数的情况下获胜的概率给出。在这种情况下,结果很简单,因为在这一点上没有任何动作可以做:
\[
V_N(s)=\开始{cases}
0&\text{if}s\leq 0\\
1&\text{if}s>0
\结束{cases}
\]在前面的每一步中,我们都会选择最有可能获胜的硬币。这导致了$t=n-1,\dots,2,1$的递归公式:
\[
V_{t-1}(s)=\最大\左\{a V_t(s+1)+(1-a)V_t
\]我找不到一种方法来计算封闭形式的表达式,但用数字计算它是相当简单的。这里有一个高效的Python代码,它为$(a,b,N)$的任何选择计算$V_0(0)$。
将numpy导入为np#如果硬币A的概率为+1,而(1-A)的概率为-1,则获胜概率为,#硬币B的概率为+2,(1-B)的概率为-2,我们总共翻转了N次def compute_win_prob(a,b,N):#移动索引,使“s”的分数位于索引v[s+2*N]v=np.零(4*N+1)#初始化(时间=N)v[:2*N]=0v[2*N+1:]=1#当我们向后递归到time=0时覆盖结果#此代码效率很高:使用矢量化并覆盖过去的结果对于范围(N)内的t:硬币A=A*v[3:4*N]+(1-A)*v[1:4*N-2]币_B=B*v[4:4*N+1]+(1-B)*v[0:4*N-3]v[2:4*N-1]=np.最大值(coin_A,coin_B)#返回假设我们以0分开始的获胜概率返回v[2*N]
当我们使用$a=b=0.5$和$N=100$运行此脚本时,我们获得了大约0.6403$的获胜概率。我们可以得到准确的使用以下Mathematica代码回答:
计算WinProb[a_,b_,n]:=(v=常数阵列[0,4n+1];v[2n+2;;4n+1]]=1;对于[t=0,t<n,t++,CoinA=a v[[4;;4n]]+(1-a)v[[2;;4n-2]];硬币b=b v[[5;;4n+1]]+(1-b)v[[1;;4n-3]];v[[3;;4n-1]]=映射线程[Max,{CoinA,CoinB}];];v[[2n+1]])计算机WinProbe[1/2,1/2100]
这为我们提供了准确的结果:
\[
\text{Prob}(\text{win})=\tfrac{811698796376000066208208781649}{126765060022929401496703205376}\约0.640317
\]
做更多的翻转有帮助吗?
如果我们做100次翻转,我们可以赢得64%的时间,但如果我们做1000次或更多翻转怎么办?我们能继续增加获胜的机会吗?情况似乎并非如此。当我们做越来越多的翻转(增加$N$)时,获胜的概率会略有增加,但只会达到一个极限。为了看到这一点,我解决了高达100000次翻转的$N$问题。以下是我的发现:
考虑到函数增长的速度有多慢,似乎应该有一个有限的限制,这个限制大约在$\frac{2}{3}$(图上的最后一点是$0.6658$)。但有没有其他方法可以计算这个极限呢?
限制大量翻转的行为
情况$a=b=\tfrac{1}{2}$的最佳策略是在得分为正时掷硬币a,在得分为负时掷硬币b。如果我们使用这种策略,我们将以$N\to.infty$的身份赢得游戏的频率是多少?
我们可以在随机行走众所周知,在1D线上的随机行走(每一步向左或向右移动的概率相等)将在足够的时间内访问每个整数无数次。众所周知,在行走首次返回其起点之前,预期的步数是无限的。因此,随着$N$变大,我们可以预计分数将只花费接近0的时间的极小部分。
我们可以将此过程建模为马尔可夫链带有状态:
\[
\点,-8,-6,-4,-2,0,1,2,3,4,\点
\]当我们的分数为$\leq 0$时,我们将掷硬币B并移动$\pm 2$。当我们的分数是$\gt 0$时,我们将掷硬币A并移动$\pm 1$。请注意,状态$-3、-5、-7、\dots$永远无法到达,因为当分数为负时,我们只移动$\pm 2$。基于上面的随机游走论证,我们可以预计马尔可夫链的大部分时间都会有较大的分数(无论是正面还是负面)。
作为近似值,我们可以想象,一旦我们达到$+2$,我们将花费大量时间在积极的方面(赢得分数),然后再回到$1$。同样,一旦我们达到了0美元,我们将在回来之前花费大量时间在消极方面(失分)。由于这个无限马尔可夫链的正半部和负半部具有相同的概率分布,我们可以预计在这两个半部上花费的时间相等。我们通过截断马尔可夫链条并指定一个转移概率$\gamma\gg 0$,一旦到达该转移概率,就可以对这种情况进行建模。以下是生成的截断马尔可夫链:
该马尔可夫链的转移矩阵为:
\[
A=\开始{bmatrix}
\gamma&&frac{1}{2}\0\\
0&0&1-\伽马\\
1-\gamma和\frac{1}{2}和\gamma
\结束{bmatrix}
\]稳态分布(对应于$1$特征值的右特征向量)由$\begin{bmatrix}\tfrac{1}{2}&1-\gamma&1\end{bmattrix}$给出。正如预期的那样,由于$\gamma到1$,与中间状态1相关的概率越来越小。在极限状态下,在获胜状态下花费的时间比例为
\[
\text{Probe}(\text{win-as}N\to\infty)=\frac{1}{\trac{1}{2}+1}=\frac{2}{3}
\]因此,这证明了为什么我们在上面的数值模拟中发现获胜概率趋向于$\tfrac{2}{3}$。
作为旁白,@电气设备在来自的一些帮助下@DarkAdonisSA公司找到了一个计算获胜概率的公式,该概率是$N$的函数。这个公式是:
$\显示样式
\text{Prob}(\text{win in}N\text{steps})=\frac{2}{3}+\frac{(-1)^N}{2^N}
\left[\frac{1}{3}+\sum_{k=1}^{N-1}(-1)^k\binom{k}{\lfloor k/2\rfloor}\right]
$
到目前为止,我们还没有公式的证明,但当$N=100$时,它确实给出了确切的答案,并且它也清楚地揭示了$\tfrac{2}{3}$的极限,因为第二项往往为零,即$N\to-infty$。似乎也没有一种有意义的方法来简化这个公式。
更改概率
我们还可以检查当我们尝试改变$a=b=\tfrac{1}{2}$的概率时会发生什么。使用上面显示的Python函数,这是一个简单的练习。以下是我们假设硬币B是公平的,而硬币A是不公平的:
正如预期的那样,当硬币A的概率较低时,最佳策略是将硬币B掷得更多,这只会导致0.5的获胜概率。随着硬币A的概率增加,我们获胜的机会也增加了。我们还可以看到当我们增加$a$或$b$时会发生什么(这两种硬币都不是公平的硬币)。以下是我们获得的结果:
再一次,我努力为上述任何一种情况($a$和/或$b$变化)找到封闭式表达式。即使对于较简单的实例,解决方案也会很快变得复杂。例如,当游戏只持续4次翻转时,$b=\tfrac{1}{2}$作为$a$函数的获胜概率为:
\[
\text{Prob}(\text{win})=\begin{cases}
\裂缝{1}{8}(a+4)&0\leq-a\leq\tfrac{1}}{2}\\
-\压裂{1}{8}\左(16a^4-32a^3+20a^2-11a-1\右)&\tfrac{1}}{2}\leqa\leq\gamma\\
-\压裂{1}{2}a\左(6a^3-11a^2+6a-3\右)&\gamma\leqa\leq1
\结束{cases}
\]其中$\gamma\approx 0.7328$是$8\gamma^3-4\gamma ^2-1=0$的根之一。(这是使用上面包含的Mathematica函数发现的)。每次我们增加翻转次数时,分段多项式中的部分数量可能会加倍。因此,当我们到达$N=100$时,我们似乎不太可能有一个简单的封闭式表达式!