Contra manos aleatorias

He escrito un programa para calificar 2 cartas ocultas (tu mano) contra una sola mano aleatoria. Funciona: comparé sus resultados con una lista publicada.

Sus dos cartas ocultas se combinan con un tablero común de 5 cartas para crear la mejor mano de 5 cartas. Puedes jugar al tablero. Cada oponente hace lo mismo.

Retiro las dos cartas del mazo de 52 cartas y ejecuto todos los tableros de 5 cartas combin(50,5) = 2,118,760. Para cada tablero, ejecuto las 2 manos de cartas restantes combin(45,2) = 990y simplemente sumo las ganancias y las pérdidas.

Sin embargo, contra más de una mano al azar se complica. Si tiene el 50 % contra 1 mano aleatoria, no puede simplemente dividir por 2 y decir que tiene el 25 % contra 2 manos aleatorias.

Mi pregunta se relaciona con emparejamientos versus 2 manos aleatorias. ¿Necesitaría correr combin(990,2) = 489,555? Parece que tiene que haber un truco para obtener resultados frente a múltiples manos aleatorias sabiendo el valor de una mano aleatoria. Veo calculadoras de póquer que hacen esto muy rápido.

Si tenemos el 50 % frente a una mano aleatoria, entonces frente a dos manos aleatorias es el 34 % y tres manos aleatorias es el 21 % con las calculadoras.

Respuestas (1)

Espero que la mayoría de las calculadoras en línea solo ejecuten un subconjunto de todos los tableros posibles como una muestra representativa; por ejemplo, en ProPokerTools , si ejecuta una mano mano a mano contra una mano aleatoria, obtiene un resultado exhaustivo (en 2.781.381.002.400 intentos si ejecuta una mano aleatoria contra una mano aleatoria). mano: obviamente menos si se especifica una mano/rango para Hero), pero si compara cualquier mano/rango con 2 o más manos aleatorias, obtiene una muestra de prueba de 600 000. Obviamente, esto significa que pierde algo de precisión: ejecutar una mano aleatoria (o 50% HU) contra múltiples manos aleatorias no siempre da exactamente 33.33%, 25.00% y 20.00% contra 2, 3 y 4 villanos como debería, por ejemplo, como que ya ha encontrado en base a la última oración de su pregunta.

¿Ha intentado ejecutar el mismo emparejamiento varias veces en las calculadoras en línea que está utilizando para confirmar que los resultados son deterministas? Si es así, entonces tal vez no se esté utilizando ningún "truco", pero solo están ejecutando un cálculo exhaustivo y tienen suficiente poder de procesamiento para lograrlo. ¿Ha intentado escalar su enfoque existente a múltiples villanos aleatorios y descubrió que el tiempo de procesamiento es ¿prohibitivo?

Habiendo dicho todo eso, creo que podría haber una manera de derivar las acciones de Hero y cualquier número de villanos con participaciones aleatorias sin hacer un cálculo exhaustivo, ya que la relación parece ser lineal (dando cierto margen por el hecho de que mis acciones se generaron a partir de 600k muestras en ProPokerTools):

Acciones

Sin embargo, necesitaríamos identificar más que la naturaleza exacta de la relación lineal entre las acciones de héroe y villano para resolver esto en el caso general: la distribución de puntos a lo largo de la relación lineal para cada mano de héroe también es clave: se ve así se reduce en proporción inversa al número de villanos, pero tendríamos que trabajar un poco más para establecer si la equidad de una mano dada contra cualquier número de manos aleatorias se puede derivar simplemente conociendo la equidad de esa mano contra una sola mano. mano al azar. Esto puede estar más allá de mis capacidades matemáticas, por lo que tal vez alguien más podría superar esto y, con suerte, esta sigue siendo una respuesta útil.

Exhaustivo contra un oponente es de 20 minutos. Dos oponentes son 500 veces más tableros.
¿Cuál es su stack tecnológico? 20 minutos para exhaustivo cuando HU parece demasiado largo (esto debería ser un poco más de 2 mil millones de intentos, ¿verdad? Entonces, ¿obtiene menos de 2 millones de intentos por segundo?) - ProPokerTools parece hacer esto de manera exhaustiva en menos de un segundo...
20 segundos es demasiado tiempo. Heads up exhaustivo es de 2,097,572,400 combinaciones. Ninguna máquina puede hacer eso en menos de 1 segundo. Si me busca en CodeReview, puede ver las primeras piezas de la herramienta.
Tal vez ProPokerTools esté haciendo algún tipo de búsqueda en ese momento: ciertamente informa en la pantalla que los resultados son exhaustivos (12,585,434,400 intentos para AA vs [Aleatorio], por ejemplo) e incluso brinda números exactos de victorias y empates para cada mano, por lo que no estoy seguro de cómo puede hacerlo. haga esto sin haber evaluado exhaustivamente cada ejecución, o realizado una búsqueda en algunos datos calculados previamente. Creo que esta es una gran pregunta por cierto, espero ver otras respuestas.
12585434400 realmente no tiene sentido para mí. Es 6x mi muestra. Para un par, hay 6 formas de lograrlo, pero no hay motivo para ejecutar las 6, ya que cada combo debe tener el resultado contra una mano aleatoria.
Puede que no sea eficiente, pero como usted dice, describe el número de ensayos completamente enumerado. Sin embargo, estoy de acuerdo en que parece muy poco probable que realmente esté ejecutando 12 mil millones de pruebas en el tiempo que lleva obtener resultados, por lo que debe estar sucediendo algo más.