การวิเคราะห์มีความซับซ้อนโดยโอกาสที่เกมจะเข้าสู่ "การทำงานล่วงเวลา" เพื่อที่จะชนะโดยมีกำไรขั้นต่ำอย่างน้อยสองจุด (ไม่อย่างนั้นจะง่ายเหมือนวิธีแก้ปัญหาที่แสดงไว้ที่https://stats.stackexchange.com/a/327015/919 ) ฉันจะแสดงวิธีการเห็นภาพปัญหาและใช้สิ่งนั้นเพื่อแยกมันออกเป็นผลงานที่คำนวณโดยง่าย คำตอบ. ผลลัพธ์แม้ว่าจะยุ่งเหยิงนิดหน่อยก็จัดการได้ การจำลองแสดงให้เห็นถึงความถูกต้อง
ให้เป็นความน่าจะเป็นที่จะได้แต้ม p ถือว่าทุกจุดมีความเป็นอิสระ โอกาสที่คุณจะชนะเกมสามารถแบ่งออกเป็นเหตุการณ์ (nonoverlapping) ตามจำนวนคะแนนที่ฝ่ายตรงข้ามของคุณมีในตอนท้ายโดยสมมติว่าคุณไม่เข้าสู่การทำงานล่วงเวลา ( ) หรือทำงานล่วงเวลา ในกรณีหลังเป็น (หรือจะกลายเป็น) ชัดเจนว่าในบางขั้นตอนคะแนนเป็น 20-200,1,…,19
มีการสร้างภาพที่ดีคือ ให้คะแนนระหว่างเกมถูกพล็อตเป็นคะแนนโดยที่xคือคะแนนของคุณและyคือคะแนนของฝ่ายตรงข้าม เป็นเกมที่คลี่คะแนนย้ายไปตามขัดแตะจำนวนเต็มในด้านแรกเริ่มต้นที่( 0 , 0 ) , การสร้างเส้นทางเกม มันจบลงเป็นครั้งแรกหนึ่งของคุณได้คะแนนไม่น้อยกว่า21และมีอัตรากำไรขั้นต้นอย่างน้อย2 คะแนนที่ชนะนั้นจะรวมเป็นสองชุดคือ "ขอบเขตการดูดซับ" ของกระบวนการนี้โดยที่เส้นทางของเกมจะต้องยุติลง( x , y)xY( 0 , 0 )212
รูปนี้แสดงส่วนหนึ่งของขอบเขตการดูดซับ (มันขยายไปเรื่อย ๆ และไปทางขวา) พร้อมกับเส้นทางของเกมที่เข้าสู่การทำงานล่วงเวลา (ด้วยความสูญเสียสำหรับคุณอนิจจา)
มานับกัน จำนวนวิธีที่เกมสามารถจบลงด้วยคะแนนสำหรับคู่ต่อสู้ของคุณคือจำนวนเส้นทางที่แตกต่างกันในจำนวนเต็ม( x , y )คะแนนเริ่มต้นที่คะแนนเริ่มต้น( 0 , 0 )และสิ้นสุดที่คะแนนสุดท้าย( 20 , Y ) เส้นทางดังกล่าวถูกกำหนดโดยคะแนน20 + yในเกมที่คุณชนะ พวกเขาสอดคล้องกับชุดย่อยขนาด20ของตัวเลข1 , 2 , … , 20 +y(x,y)(0,0)(20,y)20+y201,2,…,20+yและมีของพวกเขา เนื่องจากในแต่ละเส้นทางดังกล่าวคุณจะได้รับคะแนน (ด้วยความน่าจะเป็นอิสระในแต่ละครั้งนับคะแนนสุดท้าย) และฝ่ายตรงข้ามของคุณชนะคะแนน (ด้วยความน่าจะเป็นอิสระในแต่ละครั้ง) เส้นทางที่เกี่ยวข้องกับบัญชีสำหรับโอกาสทั้งหมด 21py1-py(20+y20)21py1−py
f(y)=(20+y20)p21(1−p)y.
ในทำนองเดียวกันมีวิธีที่จะมาถึงคิดเป็น 20-20 เสมอ ในสถานการณ์นี้คุณไม่ชนะแน่นอน เราอาจคำนวณโอกาสในการชนะของคุณโดยใช้หลักการทั่วไป: ลืมว่ามีกี่คะแนนที่ทำคะแนนได้แล้วและเริ่มติดตามผลต่างของคะแนน เกมดังกล่าวมีความแตกต่างเป็นและจะสิ้นสุดเมื่อถึงหรือครั้งแรกจำเป็นต้องผ่านไปพร้อมกัน ให้เป็นโอกาสที่คุณจะชนะเมื่อความแตกต่างคือ (20,20)0+2-2±1กรัม(ฉัน)ฉัน∈{-1,0,1}(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,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)
เมื่อฉันทำสิ่งนี้คุณได้รับรางวัล 8,570 รายจาก 10,000 ซ้ำ สามารถคำนวณคะแนน 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
มีการร้องขอรหัสเพื่อสร้างรูป นี่คือ (ทำความสะอาดเพื่อสร้างกราฟิกที่ดีกว่าเล็กน้อย)
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, "."))