Estoy tratando de desarrollar una IA para un juego de cartas y estoy un poco atascado sobre la técnica / algoritmo que debo usar. Aquí hay algunas suposiciones sobre el juego:
- Después de que las cartas se distribuyen a los jugadores, no hay aleatoriedad. Quiero decir que cada jugador puede elegir qué cartas juega, pero no se produce un proceso aleatorio como al distribuir las cartas al comienzo del juego.
- Hay restricciones sobre las cartas que se pueden jugar cuando ya se jugó una carta.
- El jugador que gana el truco juega primero. Por ejemplo, el jugador 1 juega una carta, el jugador 2 juega una carta y gana. Entonces el jugador 2 juega una carta y luego el jugador 1 juega.
Conozco muchas pistas / reglas (por ejemplo, si sé que el jugador tiene las cartas A, B, C, entonces debería jugar D), lo que me ayuda a ganar el juego. Por lo tanto, primero quería usar una red bayesiana para describir esas reglas. El problema es que no conozco ninguna probabilidad de asignar, pero podría calcular una heurística usando la historia de los juegos jugados (contra un humano). Segundo problema, es muy probable que no conozca todas las reglas y que la IA necesite algunas reglas implícitas para encontrar el juego óptimo.
¿No estoy seguro de si esta sería una buena manera de desarrollar una IA para un juego de cartas?
También me pregunto si hay otras técnicas que se ajusten mejor al problema. Por ejemplo, eché un vistazo a minimax (tal vez con un algoritmo de poda), pero ¿sería una buena opción para este problema? No estoy muy seguro ya que las jugadas más importantes están al comienzo del juego cuando hay los parámetros desconocidos más altos (la mayoría de las cartas aún no se juegan).
Respuestas:
Su ejemplo suena similar a Bridge . Los principales sistemas de juego de Bridge usan métodos de Monte Carlo para seleccionar movimientos. A un nivel alto:
Una vez que algo funciona, puede agregar todo tipo de estrategias enriquecidas. Por ejemplo, varíe sus probabilidades según las jugadas históricas de un jugador, varíe las probabilidades según el estilo de un jugador (pasivo, cauteloso, agresivo) o incluso considere los efectos de jugadores específicos que juegan juntos.
Editar según el comentario de LaurentG:
En última instancia, es posible que desee desechar la idea del juego perfecto para todos los jugadores y sustituirlo por algo más realista. Conceptualmente, separe las probabilidades de que una carta esté en la mano de alguien (distribución de cartas) de la probabilidad de que un jugador juegue una carta legal determinada durante una mano (selección de cartas).
La selección de cartas está lista para aprender. Si realiza un seguimiento de las jugadas en los juegos, puede aprender cómo un jugador determinado, o los jugadores en general, tienden a jugar según las cartas en su mano y las cartas que se han jugado. Incluso podrías ponerte elegante y modelar sus suposiciones sobre las cartas que se les ocultan.
También hay oportunidades de aprendizaje para la distribución de tarjetas. Las ofertas pasadas y la selección de cartas de un jugador durante una mano pueden revelar un "aviso" sobre lo que está oculto en su mano. Podrías usar datos históricos para ajustar las probabilidades al construir cada juego virtual.
fuente
Un caso de experiencia personal reciente:
Yo mismo he estado trabajando en un juego de cartas (Bisca, un juego portugués de 2 jugadores), y he obtenido buenos resultados con los métodos de Monte Carlo, especialmente con el reciente algoritmo de búsqueda de árbol Monte Carlo del conjunto de información (ISMCTS, descrito con ejemplo de código fuente en Python en http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm ).
Se juega razonablemente bien, con el movimiento incorrecto ocasional, solo con el conocimiento de las reglas del juego. Actualmente estoy tratando de asimilarlo, para poder mejorarlo, ya que de acuerdo con la información que he leído sobre él (y su MCTS "padre") es posible mejorar su juego con heurística ( http: // www .orangehelicopter.com / ed / papers / aiide13.pdf ) e inferencia de la tarjeta del oponente.
fuente
Creo que depende de las reglas del juego.
Esto es lo que entiendo de tu pregunta:
Suposiciones
Ejemplo de juego que sigue estas reglas:
Ahora, este juego se decide por suerte en el sorteo y por poder memorizar qué cartas se han jugado para conocer la mano de tus oponentes.
En esta situación, haría que la IA solo recordara parcialmente qué cartas se jugaron, es decir, eliminar aleatoriamente de la lista recordada algún porcentaje de las cartas jugadas (menor número = IA de mayor dificultad), pero no importantes como Ases o Reyes. De esta manera, por ejemplo, la IA sabrá que es seguro jugar una Reina de Corazones porque recordará que el oponente no tiene el As o el Rey, pero tendrá que calcular una probabilidad si quiere jugar el 10, porque quizás no recuerde si el Jack todavía está en juego.
Esto imita la capacidad de atención humana.
TL; DR
Limite cuánto sabe la IA para que sus decisiones no sean perfectas, solo lo suficientemente buenas.
fuente