Mis cálculos no son iguales a los de los demás, así que comparemos.
Si los relanzamientos del Jugador 1 son cuando x1 y x2, y el relanzamiento del Jugador 2 es cuando y1 o menos, pienso (asumiendo x2≤y1≤x1) que la probabilidad de que el Jugador 2 gane es
∫x20y1(x1x2y)dy+∫y1x2y1(x1x2y+x1y−x1x2)dy+∫x1y1(y1+1)(x1x2y+x1y−x1x2)dy+∫1x1(y1+1)(x1x2y+x1y−x1x2+y−x1)dy dando
p2=12(1−x1x2y21−x1y21+x1x22y1+x1x2y1+x21y1−x1y1+y1−x1x2+x21−x1) y p1=1−p2. Entonces pienso que las derivadas son cero cuando
- dp1dx2=0⟹x2=y21−y1+12y1 y
- dp1dx1=0⟹x1=(x2+1)y12+(−x22−x2+1)y1+x2+12(y1+1) y
- dp2dy1=0⟹y1=x1x22+x1x2+x12−x1+12x1(x2+1)
así que tres ecuaciones simultáneas no lineales con tres incógnitas y la solución de (x1,x2,y1)≈(0.697910,0.593225,0.651477) dando p1≈0.576461 y p2≈0.423539.
Comparemos esto con una simulación (usando la misma semilla para reproducibilidad):
firstplayerwins <- function(x1,x2,y1){
x <- runif(1)
if (x < x1){x <- runif(1)}
if (x < x2){x <- runif(1)}
y <- runif(1)
if (y < y1){y <- runif(1)}
return(x > y)
}
set.seed(2023)
sims <- replicate(10^5, firstplayerwins(0.697910, 0.593225, 0.651477))
c(mean(sims), mean(!sims))
# 0.57728 0.42272
así que cerca, teniendo en cuenta el ruido de la simulación.
La respuesta de AnCars parece sugerir el uso de (23,12,12) (como también lo hace Paul Smith) lo cual da
set.seed(2023)
sims <- replicate(10^5, firstplayerwins(2/3, 1/2, 1/2))
c(mean(sims), mean(!sims))
# 0.58361 0.41639
lo cual es peor para el segundo jugador, pero el Jugador 2 cambiando y1 mejorarían la probabilidad p2 (en este caso óptimamente en c=2336≈0.6389)
set.seed(2023)
sims <- replicate(10^5, firstplayerwins(2/3, 1/2, 23/36))
c(mean(sims), mean(!sims))
# 0.574 0.426
aunque entonces el Jugador 1 podría cambiar x1 y x2, y así sucesivamente hasta llegar a la solución de derivada cero.
Harish Vemuri sugiere (0.69,0.55,0.74) lo cual nuevamente da una ventaja al Jugador 1
set.seed(2023)
sims <- replicate(10^5, firstplayerwins(0.69, 0.55, 0.74))
c(mean(sims), mean(!sims))
# 0.58287 0.41713
y nuevamente cambiando y1 mejorarían la probabilidad para el Jugador 2
set.seed(2023)
sims <- replicate(10^5, firstplayerwins(0.69, 0.55, 0.62976))
c(mean(sims), mean(!sims))
# 0.57578 0.42422
De hecho, podemos utilizar las consecuencias de las derivadas cero para iterar hacia la solución de equilibrio:
iterated <- function(x1, x2, y1, rounds=20){
for (n in 1:rounds){
x1[n+1] <- ((x2[n]+1)*y1[n]^2 + (-x2[n]^2-x2[n]+1)*y1[n] + x2[n] + 1) /
(2*(y1[n]+1))
x2[n+1] <- (y1[n]^2 - y1[n] + 1) / (2*y1[n])
y1[n+1] <- (x1[n]*x2[n]^2 + x1[n]*x2[n] + x1[n]^2 - x1[n] + 1) /
(2*x1[n]*(x2[n]+1))
}
print(cbind(x1,x2,y1))
}
iterated(2/3, 1/2, 1/2)
dando (a pesar de un pequeño desliz en x2 al principio y luego en y1)
x1 x2 y1
[1,] 0.6666667 0.5000000 0.5000000
[2,] 0.6666667 0.7500000 0.6388889
[3,] 0.6909134 0.6020531 0.7083333
[4,] 0.7115098 0.5600490 0.6562810
[5,] 0.6988111 0.5900093 0.6380170
[6,] 0.6949647 0.6026866 0.6502897
[7,] 0.6976317 0.5940330 0.6550889
[8,] 0.6987173 0.5907996 0.6517936
[9,] 0.6979795 0.5930108 0.6505392
[10,] 0.6977016 0.5938628 0.6513951
[11,] 0.6978917 0.5932808 0.6517233
[12,] 0.6979648 0.5930584 0.6514990
[13,] 0.6979149 0.5932104 0.6514132
[14,] 0.6978958 0.5932686 0.6514718
[15,] 0.6979088 0.5932288 0.6514943
[16,] 0.6979138 0.5932136 0.6514789
[17,] 0.6979104 0.5932240 0.6514730
[18,] 0.6979091 0.5932280 0.6514771
[19,] 0.6979100 0.5932253 0.6514786
[20,] 0.6979104 0.5932242 0.6514775
[21,] 0.6979101 0.5932249 0.6514771