由于游戏进入“加时赛”以赢得至少两分的优势而使分析变得复杂。 (否则,它将像https://stats.stackexchange.com/a/327015/919所示的解决方案一样简单。)我将展示如何可视化问题并将其分解为易于计算的贡献答案。结果虽然有些混乱,但可以控制。模拟证明了其正确性。
令为您赢得积分的概率。p 假设所有点都是独立的。假设您不加班()或您加班根据对手在最后的得分可将您赢得比赛的机会分解为(非重叠)事件。在后一种情况下,(或将变得)显而易见,在某个阶段分数为20-20。0,1,…,19
有一个很好的可视化。 让游戏中的得分绘制为点,其中是您的得分,是您对手的得分。随着游戏的进行,得分沿着第一个象限中的整数格子从开始移动,从而创建了游戏路径。结束时,您中的一个人第一次获得至少且利润率至少为。这样的获胜点形成了两组点,这是该过程的“吸收边界”,在此必须终止游戏路径。X Ý (0 ,0 )21 2(x,y)xy(0,0)212
此图显示了吸收边界的一部分(无限向上和向右延伸)以及进入加时赛的路径(可惜您蒙受损失)。
我们数一下。 游戏为对手以点结束的方式的数量是分数的整数格中从初始分数开始到倒数第二个分数。此类路径取决于您赢得游戏的点中的哪一个。因此,它们对应于数字的大小为的子集,其中有。因为在每个这样的路径中您都赢了分(每次都有独立概率,计算最终分),而您的对手赢了(X ,Ý )(0 ,0 )(20 ,ÿ )20 + Ý 20 1 ,2 ,... ,20 + ÿy(x,y)(0,0)(20,y)20+y201,2,…,20+y 21py1−py(20+y20)21py个点(每次具有独立概率),与相关的路径占了1−py
f(y)=(20+y20)p21(1−p)y.
同样,有种方式可以得出表示20-20并列的。在这种情况下,您没有确定的胜利。我们可以通过采用一个通用的约定来计算您获胜的机会:忘记到目前为止已经获得了多少分,并开始跟踪积分差。游戏的差值为并且在它初次达到或时结束,必定会沿途经过。令是当差值为时您获胜的机会。(20+2020)(20,20)0+2−2±1g(i)i∈{−1,0,1}
由于您在任何情况下获胜的机会都是,所以我们有p
g(0)g(1)g(−1)=pg(1)+(1−p)g(−1),=p+(1−p)g(0),=pg(0).
向量的线性方程组的唯一解表示(g(−1),g(0),g(1))
g(0)=p21−2p+2p2.
因此,这是您赢得的机会(这是)。(20,20)(20+2020)p20(1−p)20
因此,您获胜的机会是所有这些相互关联的可能性的总和,等于
==∑y=019f(y)+g(0)p20(1−p)20(20+2020)∑y=019(20+y20)p21(1−p)y+p21−2p+2p2p20(1−p)20(20+2020)p211−2p+2p2(∑y=019(20+y20)(1−2p+2p2)(1−p)y+(20+2020)p(1−p)20).
右括号内的内容是的多项式。(看起来它的学位是,但是所有主导词都被取消了:它的学位是)p2120
当,获胜的机会接近p=0.580.855913992.
您可以毫不费力地将此分析推广到以任意数量的点终止的游戏。当所需的余量大于,结果将变得更加复杂,但同样简单。2
顺便说一下,有了这些获胜的机会,您有机会赢得了前场比赛。这与您的报告并不矛盾,这可能会鼓励我们继续假设每一点的结果都是独立的。因此,我们预计您有机会(0.8559…)15≈9.7%15
(0.8559…)35≈0.432%
假设他们按照所有这些假设进行,则将赢得其余所有场比赛。除非收益很大,否则听起来似乎不是一个好选择!35
我喜欢通过快速仿真来检查这样的工作。 这里的R
代码可在一秒钟内生成数万个游戏。假设游戏将超过126分(极少数游戏需要持续那么长时间,因此此假设对结果没有实质影响)。
n <- 21 # Points your opponent needs to win
m <- 21 # Points you need to win
margin <- 2 # Minimum winning margin
p <- .58 # Your chance of winning a point
n.sim <- 1e4 # Iterations in the simulation
sim <- replicate(n.sim, {
x <- sample(1:0, 3*(m+n), prob=c(p, 1-p), replace=TRUE)
points.1 <- cumsum(x)
points.0 <- cumsum(1-x)
win.1 <- points.1 >= m & points.0 <= points.1-margin
win.0 <- points.0 >= n & points.1 <= points.0-margin
which.max(c(win.1, TRUE)) < which.max(c(win.0, TRUE))
})
mean(sim)
当我执行此操作时,您在10,000次迭代中赢得了8,570个案例。可以计算Z分数(近似正态分布)来测试以下结果:
Z <- (mean(sim) - 0.85591399165186659) / (sd(sim)/sqrt(n.sim))
message(round(Z, 3)) # Should be between -3 and 3, roughly.
在此模拟中的值为与前述理论计算完全一致。0.31
附录1
根据对问题的更新,其中列出了前18场比赛的结果,以下是与这些数据一致的游戏路径的重构。您会看到其中两三场比赛险些接近亏损。(任何以浅灰色正方形结尾的路径对您来说都是一种损失。)
该图的潜在用途包括观察:
附录二
要求创建图形的代码。在这里(清理以生成稍微好一点的图形)。
library(data.table)
library(ggplot2)
n <- 21 # Points your opponent needs to win
m <- 21 # Points you need to win
margin <- 2 # Minimum winning margin
p <- 0.58 # Your chance of winning a point
#
# Quick and dirty generation of a game that goes into overtime.
#
done <- FALSE
iter <- 0
iter.max <- 2000
while(!done & iter < iter.max) {
Y <- sample(1:0, 3*(m+n), prob=c(p, 1-p), replace=TRUE)
Y <- data.table(You=c(0,cumsum(Y)), Opponent=c(0,cumsum(1-Y)))
Y[, Complete := (You >= m & You-Opponent >= margin) |
(Opponent >= n & Opponent-You >= margin)]
Y <- Y[1:which.max(Complete)]
done <- nrow(Y[You==m-1 & Opponent==n-1 & !Complete]) > 0
iter <- iter+1
}
if (iter >= iter.max) warning("Unable to find a solution. Using last.")
i.max <- max(n+margin, m+margin, max(c(Y$You, Y$Opponent))) + 1
#
# Represent the relevant part of the lattice.
#
X <- as.data.table(expand.grid(You=0:i.max,
Opponent=0:i.max))
X[, Win := (You == m & You-Opponent >= margin) |
(You > m & You-Opponent == margin)]
X[, Loss := (Opponent == n & You-Opponent <= -margin) |
(Opponent > n & You-Opponent == -margin)]
#
# Represent the absorbing boundary.
#
A <- data.table(x=c(m, m, i.max, 0, n-margin, i.max-margin),
y=c(0, m-margin, i.max-margin, n, n, i.max),
Winner=rep(c("You", "Opponent"), each=3))
#
# Plotting.
#
ggplot(X[Win==TRUE | Loss==TRUE], aes(You, Opponent)) +
geom_path(aes(x, y, color=Winner, group=Winner), inherit.aes=FALSE,
data=A, size=1.5) +
geom_point(data=X, color="#c0c0c0") +
geom_point(aes(fill=Win), size=3, shape=22, show.legend=FALSE) +
geom_path(data=Y, size=1) +
coord_equal(xlim=c(-1/2, i.max-1/2), ylim=c(-1/2, i.max-1/2),
ratio=1, expand=FALSE) +
ggtitle("Example Game Path",
paste0("You need ", m, " points to win; opponent needs ", n,
"; and the margin is ", margin, "."))