分析は、ゲームが少なくとも2ポイントのマージンで勝つために「残業」に入るという見通しによって複雑になります。 (それ以外の場合はhttps://stats.stackexchange.com/a/327015/919に示されているソリューションと同じくらい簡単です。)問題を視覚化し、それを使用して、簡単に計算できる貢献に分解する方法を示します。答え。結果は、少し面倒ですが、扱いやすいです。シミュレーションはその正確性を裏付けています。
してみましょうポイントを獲得するあなたの確率があること。p すべてのポイントが独立していると仮定します。ゲームに勝つチャンスは、オーバータイムにならない()かオーバータイムになったと仮定して、対戦相手が最後に持っているポイント数に応じて(オーバーラップしない)イベントに分割できます。後者の場合、ある段階でスコアが20〜20だったことは明らかです(または明らかになります)。0,1,…,19
素晴らしい視覚化があります。 ゲーム中のスコアをポイントとしてプロットされてみましょうあなたのスコアとある相手の得点です。ゲームが展開すると、スコアはで始まる最初の象限の整数格子に沿って移動し、ゲームパスを作成します。あなたの1人が少なくともを獲得し、少なくともマージンを持っているとき、それは終了します。このような勝ち点は、このプロセスの「吸収境界」である2セットの点を形成し、ゲームパスが終了する必要があります。のX Y (0 、0 )21 2(x,y)xy(0,0)212
この図は、吸収境界の一部(上方向および右方向に無限に伸びている)と、残業になったゲームのパス(残念ながらあなたにとっては損失です)を示しています。
数えてみよう。 ゲームで終了することができるいくつかの方法相手のポイントの整数格子における異なるパスの数であるスコアが初期スコアで始まると最後から二番目のスコアで終わる。そのようなパスは、ゲーム内のポイントのどれで勝ったかによって決まります。これらは、サイズのサブセットに対応し、したがって数字の、及び存在するそれらのは。そのような各パスで、ポイント(独立した確率毎回、最終ポイントを数える)で勝ち、相手が勝ったので(X 、Y )(0 、0 )(20 、Y )20 + Y 20 1 、2 、... 、20 + Yy(x,y)(0,0)(20,y)20+y201,2,…,20+y(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
1秒間に何万ものゲームを生成するコードを 次に示します。ゲームが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ゲームの結果をリストする質問の更新に照らして、これらのデータと一致するゲームパスの再構築があります。2つまたは3つのゲームが危険に近いほど損失に近かったことがわかります。(明るい灰色の正方形で終わるパスは、損失です。)
この図の潜在的な用途には、以下の観察が含まれます。
付録2
図を作成するコードが要求されました。ここにあります(少しきれいなグラフィックを生成するために整理されています)。
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, "."))