Algoritmo de aprendizaje automático para jugar Connect Four

14

Actualmente estoy leyendo sobre aprendizaje automático y me preguntaba cómo aplicarlo para jugar Connect Four .

Mi intento actual es un clasificador multiclase simple que utiliza un modelo de función sigmoide y el método uno contra todos.

En mi opinión, las características de entrada deben ser el estado (disco del jugador 1, disco del jugador 2, vacío) de los campos de cuadrícula 7x6 = 42.

La salida sería el número de la fila para colocar el disco. Debido a que es un número discreto entre 1 y 7, supongo que esto puede tratarse como un problema de clasificación multiclase.

Pero, ¿cómo genero ejemplos de capacitación utilizables en el aprendizaje supervisado?

El objetivo principal es ganar el juego, pero el resultado obviamente no se conoce al hacer todos menos el último turno. Si solo dejo que dos jugadores que deciden aleatoriamente qué hacer juegan unos contra otros miles de veces, ¿será suficiente simplemente tomar todos los turnos realizados por el ganador de cada ronda de juego como ejemplos de entrenamiento? ¿O tengo que hacer esto de una manera completamente diferente?

Editar: Como se sugiere en los comentarios, leí un poco sobre el aprendizaje por refuerzo. Por lo que sé, Q-Learning debería hacer el truco, es decir, tengo que aproximar una función Q del estado actual y la acción a tomar para ser la recompensa acumulativa máxima que comienza en ese estado. Luego, cada paso sería elegir la acción que resulte en el valor máximo de Q. Sin embargo, este juego tiene demasiados estados para hacer esto, por ejemplo, como una tabla de búsqueda. Entonces, ¿cuál es una forma efectiva de modelar esta función Q?

Tom
fuente
2
"Aprendizaje de refuerzo" de Google
George
Bien, supongo que eso se aplica exactamente a este problema. Parece que hay mucha lectura por delante. ¿Algún puntero o recomendación más específico?
Tom
1
Si supiera más, lo publicaría como respuesta :) Lamentablemente, no tengo experiencia en el aprendizaje por refuerzo. Comenzaría con el libro "Machine Learning" de Tom Mitchell. Es un libro introductorio muy bueno y también tiene un capítulo sobre el aprendizaje por refuerzo.
George
1
Lo último, solo tengo curiosidad sobre el aprendizaje automático y tratar de conocerlo.
Tom
1
@ Tom, hay mejores formas de 'conocer' las técnicas de aprendizaje automático. Comenzaría con técnicas más básicas de clasificación y regresión y avanzaría desde allí. Puede obtener conjuntos de datos del repositorio de datos de aprendizaje automático de UCI, consultar las notas del curso de aprendizaje automático de Andrew Ng (Stanford) y comenzar a implementar. Saltar directamente a tratar de resolver Connect 4 usando el aprendizaje por refuerzo parece bastante incómodo y demasiado complicado.
Nick

Respuestas:

8

Solo para ofrecer una alternativa más simple al aprendizaje por refuerzo, puede usar el algoritmo minimax básico para buscar buenos movimientos y usar el aprendizaje automático para evaluar las posiciones del tablero.

Para aclarar, minimax construye un árbol de juego donde cada nodo está etiquetado con el resultado de las hojas hacia arriba (1 = el jugador A gana, 0 = el jugador B gana), suponiendo que A elige los movimientos que maximizan este número, y B elige los movimientos que lo minimizan

A menos que el juego sea muy simple, no podrás construir todo el árbol del juego hasta las terminales. En cambio, deberá detenerse en posiciones de tablero inacabadas y evaluar las hojas con algo de heurística (esencialmente la probabilidad de que el jugador A gane desde la posición dada). Puede dejar que un algoritmo de aprendizaje automático, como una red neuronal, intente aprender esta probabilidad al conectar cuatro posiciones con resultados conocidos.

Para generar ejemplos de entrenamiento, puedes construir tu reproductor minimax con una simple heurística, dejar que se juegue a sí mismo miles de veces, usar esos juegos para entrenar tu primera red neuronal, luego dejar que eso se pague mil juegos y así sucesivamente. Con un poco de suerte, su sistema mejorará con cada generación.

Peter
fuente
2

Escribí una publicación de blog sobre el uso de minimax para jugar connect hace cuatro años. Puedes ver el código en acción aquí . Si necesita entrenar a sus modelos, tal vez pueda dejar que juegue un par de miles de juegos contra mi implementación de minimax.

Lukas Vermeer
fuente
Siéntase libre de bifurcar mi código en Github. github.com/lukasvermeer/minimax
Lukas Vermeer
Bienvenido a Stack Exchange. Este es un sitio de preguntas y respuestas . Por favor lea nuestras preguntas frecuentes , en particular cómo responder . En particular, no queremos publicaciones que consistan únicamente en un enlace a una respuesta. Gracias por su contribución, pero ¿podría resumir los puntos principales de su publicación de blog en su publicación aquí?
Gilles 'SO- deja de ser malvado'
Lo siento, pero la pregunta original era "¿cómo genero ejemplos de capacitación utilizables en el aprendizaje supervisado?" Proporcioné enlaces a código de trabajo que se pueden usar para generarlos. No veo cómo escribir más texto arriba ayudaría a responder a la necesidad original.
Lukas Vermeer
"Siempre es bienvenido un enlace a una solución potencial, pero agregue contexto alrededor del enlace para que sus usuarios tengan una idea de qué es y por qué está allí. Siempre cite la parte más relevante de un enlace importante, en caso de que el sitio objetivo es inalcanzable o se desconecta permanentemente Creo que hice lo primero. Esto último sería irrelevante. La pregunta original necesita juegos de ejemplo, no una explicación de cómo implementar una solución.
Lukas Vermeer