Este es un caso simple de un problema de bandido multi-armado . Como observa, desea equilibrar la información que recopila al probar la moneda desconocida cuando cree que es subóptima a corto plazo en lugar de explotar el conocimiento que tiene.
En el clásico problema del bandido multi-armado, no estaría seguro de la probabilidad de ninguna moneda. Sin embargo, aquí se le da a conocer que conoce el valor de la moneda A, por lo que cuando lanza A, no obtiene información. De hecho, bien podría ignorar la naturaleza estocástica de A y asumir que obtiene un piso1 / 2
En general, creo que no se puede escapar de un problema de programación dinámica, aunque puede haber casos especiales en los que se pueda encontrar y verificar la estrategia óptima de manera más simple.
Con un uniforme previo, aquí es donde debes parar:
( 0 cabezas , 3 colas ) , ( 1 de cabeza , 5 colas ) , ( 2 cabezas , 6 colas ) , ( 3 , 7 ) , ( 4 , 8 ) , . . . ( 31 , 35 ) , ( 32 , 35 ) , ( 33 , 36 ) , ( 34 , 37 ) , . . . ( 41 , 44 ) , ( 42 , 44 ) , . . . ( 46 , 48 ) , ( 47 , 48 ) , ( 48 , 49 ) , ( 49 , 50 ).
Bajo esta estrategia, espera recolectar 61,3299 cabezas
Usé el siguiente código de Mathematica para calcular las acciones:
Clear[Equity];
Equity[n_, heads_, tails_] := Equity[n, heads, tails] =
If[n == 0, heads,
Max[1/2 + Equity[n - 1, heads, tails],
(heads + 1)/(heads + tails + 2) Equity[n - 1, heads + 1, tails] +
(tails + 1)/(heads + tails + 2) Equity[n - 1, heads, tails + 1]
]
]
A modo de comparación, la heurística de muestreo de Thompson (que Cam Davidson Pilon afirmó que es óptima) da un promedio de 60.2907 cabezas, menor en 1.03915. El muestreo de Thompson tiene el problema de que a veces muestrea B cuando tienes suficiente información para saber que no es una buena apuesta, y a menudo desperdicia las posibilidades de probar B temprano, cuando la información vale más. En este tipo de problema, casi nunca eres indiferente entre tus opciones, y existe una estrategia óptima pura.
tp[heads_, tails_] := tp[heads, tails] =
Integrate[x^heads (1 - x)^tails / Beta[heads + 1, tails + 1], {x, 0, 1/2}]
Clear[Thompson];
Thompson[flipsLeft_, heads_, tails_] := Thompson[flipsLeft, heads, tails] =
If[flipsLeft == 0, heads,
Module[{p = tp[heads, tails]},
p (1/2 + Thompson[flipsLeft-1,heads,tails]) +
(1-p)((heads+1)/(heads+tails+2)Thompson[flipsLeft-1,heads+1,tails] +
((tails+1)/(heads+tails+2)) Thompson[flipsLeft-1,heads,tails+1])]]