Esta pregunta trata sobre un enfoque para los oponentes informáticos que he creado y que actualmente se está utilizando o se planea utilizar en varios juegos de computadora.
Antecedentes
El año pasado, cuando traté de mejorar a un oponente de la computadora para un juego llamado "Buscaminas" (descripción breve: una versión multijugador por turnos de Minesweeper donde tienes que tomar más minas que tu oponente) , cambié fuertemente la forma en que funcionaban mis algoritmos . En lugar de usar un enfoque como if-else-if-else, estoy usando un conjunto de "anotadores" con pesos específicos para determinar cuál es el mejor movimiento.
Puedes pensar que para un juego como Minesweeper Flags, solo se trata de hacer movimientos que te den la mayor probabilidad de tomar una mina, pero no es tan simple. El movimiento que hará la computadora generalmente depende de varias características para ese movimiento específico en el estado actual del juego. Ejemplos de características:
- ¿Cuál es la probabilidad de que este movimiento marque una mina?
- ¿Cuál es la probabilidad de revelar algo a mi oponente aquí?
Descripción del sistema.
El sistema básicamente funciona así:
- "Pre-goleadores": se realiza un preanálisis para el estado actual del juego (en términos de Banderas del Buscaminas, esto generalmente es: Calcular todas las probabilidades)
- "Goleadores": se les pide a un conjunto de goleadores normales que determinen el puntaje para cada posible movimiento, cada anotador aplica los puntajes de acuerdo con sus propios criterios. Los anotadores pueden verificar los resultados del preanálisis realizado.
- Las puntuaciones calculadas en el paso anterior se suman y se configura como la puntuación de un movimiento.
- Los movimientos se ordenan de acuerdo con su puntaje y se clasifican para que todos los movimientos con el mismo puntaje obtengan el mismo rango.
- "Post-anotadores": el resultado de lo anterior se puede enviar a "Post-anotadores" que tienen la posibilidad de modificar los puntajes de cualquier campo de la forma que deseen, de acuerdo con las propias reglas del post anotador.
Al combinar un grupo de pre-anotadores, anotadores (con sus pesos) y post-anotadores, se convierte en lo que yo llamo una configuración de puntaje .
Resultado de ejemplo
Este es un ejemplo de puntajes que se han aplicado a las banderas de Buscaminas. Este es el mapa que se calificó:
Y esta es la salida de una configuración de puntuación real. Muestra el rango de los movimientos posibles, donde 1 es el mejor rango y se ha resaltado en blanco:
Gracias a haber escrito un código altamente flexible, este enfoque de IA también se puede insertar en otros juegos.
Ventajas y desventajas
A continuación se presentan algunas ventajas y desventajas de este sistema que puedo pensar en mí mismo.
Ventajas
- Es muy fácil crear muchas configuraciones diferentes para las IA.
- Es posible usarlo con algoritmos genéticos: cada anotador tiene un peso asociado, el peso puede convertirse en el gen.
- Usando algunas herramientas, es posible verificar por qué se realizó un movimiento específico y qué anotadores fueron los principales responsables de ese movimiento
- Usando herramientas, es posible crear un mapa del puntaje general / rango de movimientos posibles (como la captura de pantalla anterior)
- Al aplicar puntajes a la forma en que juega el humano, es posible crear un "#AI_Mirror" que intenta hacer movimientos que cree que el humano haría
Desventajas
- Puede ser extremadamente difícil ajustar una configuración de puntuación "correctamente", para que la IA juegue lo mejor posible.
Preguntas
¿El sistema que he construido aquí es ampliamente conocido en el mundo de la IA? ¿Cómo se llamaría en términos reales de IA?
¿Tiene sentido este enfoque o hay un enfoque diferente que recomendaría?
¿Qué formas hay que podrían facilitar el proceso de ajustar una configuración de puntaje?
Con respecto a la última pregunta, soy consciente de la posibilidad de usar algoritmos genéticos, también soy ligeramente consciente de SARSA (y creo que mis anotadores se parecen a la descripción de las características de ese sitio con pesos, pero desde mi entendimiento, eso no es exactamente lo que he creado aquí). Creo que un problema con SARSA es que no conoces la recompensa hasta que el juego termina, el mejor movimiento es a menudo un movimiento que no da una recompensa (una mina) en absoluto. Sus posibilidades actuales de ganar dependen tanto del puntaje actual (cuántas minas han tomado usted y su oponente) como del aspecto del mapa actual.
Esta pregunta se publicó originalmente en un sitio de Inteligencia Artificial ya desaparecido .
El código (Java) utilizado para este enfoque ahora se ha publicado en Code Review .