artificial-intelligence - los - juegos que utilizan inteligencia artificial
¿Algún buen juego de cartas estrategias de IA? (8)
Lo que describes usando probabilidades es básicamente cómo funciona la IA de póker (o un experto en póker humano). Ha habido una serie en curso sobre Coding the Wheel sobre la creación de un Bot de Poker que quizás le interese leer.
¿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.
Tal vez uno podría rastrear qué cartas abiertas hay en el juego (tan pronto como se revelen) y asignar probabilidades a ciertos eventos (por ejemplo, el oponente aún tiene 2 cartas de tréboles).
¿Alguien tiene experiencia con esto? Enlaces e indicaciones muy apreciados.
Otra buena lectura es el sitio http://aigamedev.com/ . Es muy detallado y va en ejemplos de código donde se aplica.
una respuesta concreta: implementar el algoritmo min-max con eventos aleatorios como el dibujo de cartas que contienen propagaciones en lugar de decisiones difíciles.
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 juego de memoria que es quizás un caso simple en comparación con lo que estás buscando, pero funcionó bastante bien.
Nuevamente es un blog, pero uno interesante en esta área es Computer Programming y 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 puedas ver si hay algo interesante para ti allí y él es muy prolífico sobre publicar en su blog.
Tienes razón en que el árbol de ''atravesar'' el juego 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ás una AI.
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 porción de todo el espacio.
Escribí un robot de póker 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.
La Universidad de Alberta tiene un programa de póker llamado Polaris que compite contra profesionales en torneos. Su sitio web tiene mucha información.
Si estás bien sin 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 interesan y modelar estas estrategias en su lenguaje lógico.
Si estás pensando en un juego de adivinanzas, por ejemplo, podrías 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 pueda interpretar (necesita un lenguaje de sonido).
Por lo general, un lenguaje para tal lógica debería poder expresar probabilidades básicas, al menos. Por ejemplo, un idioma dado por el siguiente formulario:
A = c | -A | A v A | A -> A | P(A) >= r | P(A) >= P(A) | /forall c . A(c)
para ra racional entre 0 y 1. Leer P (c)> = r para ser ''el jugador cree que el oponente tiene la carta c con probabilidad 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 viene dada por la fórmula ESTRATEGIA, su función de acción sería simplemente pedir una carta que satisfaga la estrategia:
act gameState = take 1 [c : c |= STRATEGY]
Este lenguaje que di como ejemplo no es lo suficientemente expresivo como para expresar problemas de ocultar 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 a la carta más fuerte, yo sostengo el tablero".
En su comentario sobre "seguimiento de qué cartas están abiertas", está limitado en el sentido de que no considera lo que piensa su oponente dadas 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 artículo llamado Logic of Pit de Ditmarsch. ( http://link.springer.com/article/10.1007/s11229-005-4331-5 ) (no implementa una IA, solo expresa el juego llamado PIT. No creo que valga la pena pagarlo. puedes obtenerlo gratis, lo vale. Quizás puedas buscar su tesis, si es gratis).
Me encantaría escribir un artículo sobre HearthStone pero nunca encuentro el tiempo :(