Poker: analizador de manos I

Un analizador de manos no es ni más ni menos que un programa que es capaz de determinar cual es la mejor mano de entre varias posibles en el juego del Poker. La gracia de conseguir un buen analizador de manos (es decir, uno que analice muchas manos en un corto espacio de tiempo) es que es posible determinar las probabilidades de ganar o perder en una partida en cualquier momento, simplemente probando todas las posibilidades (o, por lo menos, muchas).

Hace un tiempo me encontré con un analizador de manos de 5 cartas: el Cactus Kev’s Poker Hand Evaluator. Ése analizador se basa en el hecho de que sólo existen 7462 “categorías” de manos diferentes, dónde dos manos de la misma categoría empatan (es decir, es lo mismo tener full de ases a la K de corazones que full de ases a la K de tréboles. Por tanto, ambas manos están en la misma “categoría”). Gracias a eso, asigna a cada mano un número y, si obtiene el número asociado a dos manos, simplemente comparándolos será capaz de decir cual es la ganadora. Los detalles están en su página web.

A cada número se le asigna un número primo (desde el DOS = 1 hasta el AS = 41). Si suponemos que no hay color, simplemente multiplicando todos los números y mirando en una tabla hecha previamente, es casi immediato obtener el valor de dicha mano. El caso de que hubiese color se trata de forma separada. Está implementado en C y es posible descargárselo desde su página web.

No obstante, se me ocurrió una posible mejora: para aplicar la misma idea a 7 cartas, habría que evitar la multiplicación, ya que el número más grande que se puede conseguir (41^4 * 37^3 = 143133271933) ocuparía 38 bits. Si consiguiésemos bajar este número a 32, podríamos utilizar tan solo un int, mejorando con ello el rendimiento.

La idea se basa en sumar en vez de multiplicar: a cada número le asignaremos igualmente un valor, de tal manera que dos manos distintas den números distintos al sumar los valores de cada una de las cartas:

Carta: As 2 3 4 5 6 7 8 9 10 J Q K
Valor asignado: 0 1 5 24 112 521 2421 11248 52256 242769 1127845 5239688 24342288

Entonces, si suponemos que no hay color, el máximo número al que llegaremos será 113088216, que lo podremos almacenar en 27 bits! No obstante, aún hay que tener en cuenta que:

  • Para el caso en el que haya color tendremos que buscar algún método alternativo.
  • Hay que fabricar las tablas para después comprobar qué número tiene asiganada nuestra mano.
  • No podremos utilizar el analizador con manos de 8 cartas o más, ya que entonces aparecerían colisiones.

En las próximas entradas buscaremos como solucionar estos y más problemas que vayan surgiendo.

Editado. puedes descargar los archivos haciendo click aqui:

Analizador de manos de póker (Java)
466.0 KiB
224 Downloads
Details

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *