2012-03-29 6 views
6

¿Es posible extraer esa información del valor de equivalencia?En el evaluador de mano de poker Two Plus Two, ¿cómo se obtiene la mejor combinación de 5 cartas de las 7 que se le pasaron?

Entiendo que cuanto mayor sea el valor de equivalencia, mejor. La categoría y el rango también se pueden extraer del valor de equivalencia. Pero, ¿hay alguna manera de averiguar cuál es la mejor combinación de 5 cartas del 7 que le pasaste?

Twoplustwo es el evaluador de manos de póker más rápido (14-15 millones de manos evaluadas por segundo). Le das tus 7 cartas y escupe un valor de equivalencia manual. Cuanto mayor sea el valor, mejor es la tarjeta.

Aquí hay un gran resumen en TwoPlusTwo: http://www.codingthewheel.com/archives/poker-hand-evaluator-roundup#2p2

versión en caché del foro: http://web.archive.org/web/20130116102452/http://www.codingthewheel.com/archives/poker-hand-evaluator-roundup

+3

¿Puede profundizar en qué es la evaluación de mano de poker Two Plus Two? – templatetypedef

+0

hola templatetypedef, he actualizado la pregunta con un enlace a twoplustwo. – ian

+0

Todavía no entiendo. Las mejores 5 cartas de una mano de 7 cartas? O algo mas. – sblom

Respuesta

7

(disclaimer: Estoy trabajando en un software de póquer que hace, entre otras, las evaluaciones de mano)

le da a sus 7 cartas a él y escupe un valor de equivalencia mano.

hay varios evaluadores haciendo eso y si no me equivoco, algunos de ellos calculan más de cien millones de manos por segundo (!). Estos evaluadores básicamente se reducen a 7 búsquedas de matriz en una matriz gigantesca y solo se requieren unos pocos ciclos (a pesar de los errores de caché) para evaluar una mano. No creo que 14-15 millones/segundo esté cerca del más rápido. El evaluador de CactusKev es 10 veces más rápido si no me equivoco.

Ahora para responder a su pregunta:

¿cómo se consigue la mejor combinación de 5 cartas de las 7 que se le ha pasado?

Bueno, no le dice pero una vez que tenga la fuerza de la mano puede llegar a ser muy fácil: no es necesario reinventar la rueda.

Puede usar la fuerza para simplificar su "mejor cinco de siete" cálculos.

Usted podría también usar otras bibliotecas, dándole a usted directamente las cinco mejores cartas (en lugar de solo su fuerza) o puede usar la fuerza para encontrar las cinco mejores cartas usted mismo.

Voy a dar algunos ejemplos ...

  • Usted sabe que tiene una casa llena (también conocido como un "bote"), entonces usted sabe que usted está buscando tres tarjetas que tienen el mismo rango y luego el mejor par (si hay dos pares, pero seguro que encontrará al menos uno, porque el evaluador le dijo que tiene un bote).

  • Sabes que tienes una escalera: encuentra cinco cartas que se suceden una a la otra, empezando por la mejor (ten cuidado con el caso especial de la rueda).

    También podría obtener un poco más elegante para la recta: podría tomar la fuerza de cada recta posible y comparar la fuerza que el evaluador le da con estos. Si coincide, digamos, una recta de diez, simplemente busca cualquier carta T, 9, 8, 7 y 6 (sin importar el palo).

  • Usted sabe que tiene "ningún par": basta con tomar la carta más alta que cinco se encuentran

  • etc.

Sólo hay unas pocas filas diferentes ... Podrían ser, por ejemplo:

NO_PAIR 
ONE_PAIR 
TWO_PAIRS 
SET 
STRAIGHT 
FLUSH 
FULL_HOUSE 
FOUR_OF_A_KIND 
STRAIGHT_FLUSH 

(que podría, por supuesto, crear intermedia "rueda recta" y "rueda de escalera de color" y los casos "escalera real" si lo desea, etc.)

Una vez que sepa qué tipo de mano es su mano (gracias al rápido evaluador que está utilizando), simplemente cambie a un código que encuentre los cinco mejores de siete para esa mano en particular .

Creo que es una buena manera de proceder porque aprovecha el evaluador ultrarrápido y simplifica enormemente su lógica.

En el inicio, lo que se necesita para calcular la strenth vez, por ejemplo mediante el cálculo:

HIGHEST_NO_PAIR_HAND = ultraFastEvaluator("As Kd Qh Jc 9d 5s 2c"); 

HIGHEST_FULL_HOUSE = ultraFastEvaluator("As Ac Ad Kh Ks 8s 2h"); 

estoy abogando por supuesto no utilizar cadenas aquí. Es sólo un ejemplo ...

A continuación, podría, por cada mano que desee encontrar el actual cinco mejores:

  • calcular la fuerza usando el evaluador rápido
  • es que < = HIGHEST_NO_PAIR_HAND?
    • sí: tomar cinco cartas más altas
    • no: es que < = HIGHEST_ONE_PAIR_HAND? sí: tomar el par más alto + tres cartas más altas no: ¿es < = HIGHEST_TWO_PAIRS_HAND?
      • etc.

Así que en mi opinión se podría volver a utilizar una API que se encuentra directamente los cinco mejores de cada siete o totalmente reescribir su propia, pero va a más rápido si se utiliza el resultado del evaluador rápido para luego simplificar tu lógica.

EDITAR nota que no hay necesariamente una manera de hacerlo "cinco mejores de cada siete". Por ejemplo, con As Ac en una tabla Kc Kd Qh Qs 2c, tanto "As Ac Kc Kd Qh" como "As Ac Kc Kd Qs" son "cinco mejores" (el último palo de dama no importa).

4

No, no es posible extraer esa información. La tabla de búsqueda contiene solo los valores de equivalencia, que se dividen en tipo de mano y rango; no se conserva ninguna otra información.

Si necesita evaluar millones de manos por segundo y obtener la mano ganadora para cada una, en lugar de solo el rango, tendrá que utilizar un evaluador diferente. Si solo necesita extraer la mano ganadora rara vez, puede usar este evaluador y recurrir a un método más lento para encontrar las 5 mejores cartas cuando sea necesario.

+0

gracias nick! Cualquier sugerencia sobre qué evaluador usar para extraer la mano ganadora? – ian

+0

@ian En realidad, no Tengo miedo. Una ingenua podría hacer el trabajo, pero no tengo una sugerencia concreta. –

+1

@Nick Johnson: * (ver mi respuesta) * ... Lo que hice en mi propio software de póker (donde lo hago) tanto una gran cantidad de evaluaciones en las que no necesito saber las mejores cinco y luego, rara vez, realmente necesito las mejores cinco de siete), fue reutilizar el resultado de un evaluador manual rápido para luego simplificar el método utilizado para encontrar el los mejores cinco de siete (ver mi respuesta). Por supuesto, es más lento, pero según mis pruebas es más rápido (y también más fácil aunque * quizás * un poco más detallado) que volver a escribir un completo "cinco de siete" desde cero. :) – TacticalCoder

2

Publicación anterior pero voy a intentarlo. Si está utilizando una tabla de búsqueda (por ejemplo, las matrices de 7 cartas mencionadas anteriormente, también conocido como el método de Ray Wotton), construya una segunda tabla con su información objetivo en las mismas posiciones. Ejemplo: Terminé en la ranura 167,452 para encontrar mi evaluación, ahora veré mi otra matriz en la ranura 167,452 para encontrar mi mano de 5 cartas.

Una sola carta se puede representar con 6 bits: 2 para el palo y 4 para el rango. 30 bits te daría la mano completa de 5 cartas. Tal vez no sea tan simple, pero esa es la idea general. He usado esta técnica exacta para algunas cosas que hice hace un tiempo.

Alternativamente, podría pasar todas las combinaciones de 7-elija-5-cartas (21 de ellas creo) y averiguar cuál coincide con la evaluación original.

Cuestiones relacionadas