2009-02-08 18 views
26

¿Cuáles serían las estrategias para escribir un buen oponente de computadora para un juego de cartas? La mayoría de los juegos de cartas son juegos de información incompleta, por lo que simplemente mapear y atravesar el árbol de juego como se podría hacer con un juego de mesa no parece demasiado prometedor.¿Algún buen juego de cartas estrategias de IA?

Quizás uno podría rastrear qué cartas abiertas hay en el juego (tan pronto como se revelan) y asignar probabilidades a ciertos eventos (por ejemplo, el oponente aún tiene 2 cartas de palos).

¿Alguien tiene experiencia con esto? Enlaces e indicaciones muy apreciados.

+1

tarjeta -. Si su [lo suficientemente bueno para el MIT] (http://www.mitcardcounting.com/), es lo suficientemente bueno para usted. Probablemente. – new123456

Respuesta

5

Lo que describes usando probabilidades es básicamente cómo funciona la IA de póker (o un experto en poker humano). Ha habido una serie en curso en Coding the Wheel sobre la creación de un Bot de póker que usted podría estar interesado en leer.

3

Otra buena lectura es el sitio http://aigamedev.com/. Es muy detallado y va en ejemplos de código donde se aplica.

1

una respuesta concreta: implementar el min-max algorithm con eventos aleatorios como el dibujo de cartas que contienen propagaciones en lugar de decisiones difíciles.

+0

Este enlace puede ser útil: https://en.wikipedia.org/wiki/Expectiminimax_tree –

0

use el sentido común: deje que la computadora juegue según las mismas reglas que un ser humano (lógica), y cambie el nivel de dificultad cambiando parámetros como la calidad de la memoria AI.

Implementé un memory game que es quizás un caso simple en comparación con lo que está buscando, pero funcionó bastante bien.

3

Nuevamente es un blog, pero uno interesante en esta área es Computer Programming and Magic: The Gathering. Si nada más es notable debido a la programación muy complicada, MTG tiene un mar de reglas para las tarjetas y porque el autor realmente completó su primera versión del programa hace tres años. Toneladas de proyectos de juego no llegan más allá de la etapa de planificación.

El proyecto que describe en su blog es de código abierto para que pueda ver si hay algo interesante para usted allí y él es muy prolífico sobre publicar en su blog.

1

La Universidad de Alberta tiene un programa de póker llamado Polaris que compite contra profesionales en torneos. Su web site tiene mucha información.

0

Tienes razón en que recorrer el árbol del juego "no" no funcionará porque no tienes suficiente información, pero si generas varios árboles de juego potenciales y observas qué opciones tienen más probabilidades de generar mejores resultados, entonces Tendré una IA

Si tiene tiempo, puede hacerlo exhaustivamente y generar todos los escenarios posibles, pero en realidad no tiene 10 minutos para jugar una carta, así que haga una pequeña parte de todo el espacio.

Escribí un robot de póquer que hizo esto y jugó un juego bien, pero perdí interés en él antes de manejar las implicaciones de posición, por lo que nunca fue fuerte.

+0

Su descripción es muy similar a la técnica "Monte-Carlo Tree Search" –

0

Si está bien no tener el bot más eficiente, usaría un lenguaje lógico. Y cada vez es más lento y más lento cuanto más genérico hagas el idioma, pero podría ser un comienzo.

El elemento clave es definir las estrategias que le interesen y modelar estas estrategias en su lenguaje lógico.

Si usted está pensando en un juego de adivinanzas, por ejemplo, puede tener dos estrategias:

strategy-1 guess the card you think is the most likely; or 

strategy-2 among the cards that are the most likely, guess the card that 

my opponent believes to be the most likely. 

Ahora su problema es definir las estrategias en un lenguaje formal que se puede interpretar (se necesita un sonido idioma).

Por lo general, un lenguaje para tal lógica debería ser capaz de expresar probabilidades básicas, al menos. Por ejemplo, una lengua dada por la siguiente forma:

A = c | -A | A v A | A -> A | P(A) >= r | P(A) >= P(A) | \forall c . A(c) 

ra racional entre 0 y 1. Lea P (c)> = r para ser 'el jugador cree que el oponente tiene la tarjeta C con una probabilidad de al menos r. '

Por ejemplo, la estrategia-1 parece

Guess card C only if holds that 
\forall C'. P(C) >= P(C') . 

estrategia-2 parece

Guess card C only if holds that 
[\forall C'. P(C) >= P(C')]^[-\forall C''. P'(C'') > P'(C)] 

(P '(c) es la probabilidad asignada por mi oponente).

Si su estrategia está dada por la fórmula la estrategia de su función para la acción sería simplemente pidiendo una posible carta que satisface la estrategia:

act gameState = take 1 [c : c |= STRATEGY] 

Este lenguaje que di como ejemplo no es lo suficientemente expresiva para expresar problemas para esconder tu tipo (estrategias extremadamente importantes en juegos como Poker o HearthStone, por ejemplo). Para las estrategias con eso, se necesitaría alguna extensión.

Otra extensión común sería para los operadores dinámicos, por lo que podría expresar estrategias como 'después de derrotar la carta más fuerte que tengo en la placa'.

En su comentario sobre "seguimiento de qué tarjetas están abiertas," está limitado en el sentido de que no considera lo que su oponente piensa teniendo en cuenta sus acciones. Strategy-2 es un ejemplo de cómo mejorar la computadora con creencias de orden superior.

Para un juego de adivinanzas sugiero el documento llamado Logic of Pit de Ditmarsch. (http://link.springer.com/article/10.1007/s11229-005-4331-5) (no implementa un AI, solo expresa el juego llamado PIT. No creo que valga la pena pagarlo. Si puedes obtenerlo gratis, lo vale. Quizás puedas buscar su tesis, en cambio si es gratis)

me encantaría escribir un documento sobre HearthStone pero nunca encontrar el tiempo de recuento :(

Cuestiones relacionadas