¿Cómo elijo el mejor algoritmo para un juego de mesa como las damas?
15
¿Cómo elijo el mejor algoritmo para un juego de mesa como las damas?
Hasta ahora, he considerado solo tres algoritmos, a saber, minimax, poda alfa-beta y búsqueda de árbol de Monte Carlo (MCTS). Aparentemente, tanto la poda alfa-beta como MCTS son extensiones del algoritmo básico minimax.
Ninguno de estos algoritmos es práctico para el trabajo moderno, pero son buenos lugares para comenzar pedagógicamente.
Siempre debe preferir utilizar la poda alfa-beta en lugar de la búsqueda mínima de minimax.
Debería preferir utilizar alguna forma de búsqueda guiada heurística si puede encontrar una heurística útil. Encontrar una heurística útil generalmente requiere mucho conocimiento de dominio.
Debería preferir utilizar la búsqueda de árbol de Montecarlo cuando le falte una buena heurística, cuando los recursos computacionales sean limitados y cuando los errores no tengan consecuencias descomunales en el mundo real.
Más detalles:
En la búsqueda de minimax, no intentamos ser muy inteligentes. Simplemente utilizamos un enfoque estándar de programación dinámica. Es fácil determinar el valor de los movimientos de diferencia si estamos cerca del final del juego (dado que el juego terminará en el siguiente movimiento, no tenemos que mirar muy lejos). Del mismo modo, si sabemos lo que hará nuestro oponente en el último movimiento del juego, es fácil descubrir qué debemos hacer en el segundo último movimiento. Efectivamente, podemos tratar el segundo último movimiento como el último movimiento de un juego más corto. Entonces podemos repetir este proceso. El uso de este enfoque es seguro para descubrir las mejores estrategias en un juego estándar de forma extensa, pero requerirá que consideremos cada movimiento posible, lo cual no es factible para todos los juegos, excepto los más simples.
La poda alfa-beta es una mejora estricta en la búsqueda de Minimax. Aprovecha el hecho de que algunos movimientos son obviamente peores que otros. Por ejemplo, en ajedrez, no necesito considerar ningún movimiento que te dé la oportunidad de ponerme en jaque mate, incluso si pudieras hacer otras cosas desde esa posición. Una vez que veo que un movimiento puede conducir a una pérdida, no me molestaré en pensar qué más podría suceder a partir de ese momento. Iré a mirar otras cosas. También es seguro que este algoritmo producirá el resultado correcto, y es más rápido, pero aún debe considerar la mayoría de los movimientos en la práctica.
Hay dos formas comunes de evitar el costo computacional extremo de resolver este tipo de juegos exactamente:
Utilice una heurística (la búsqueda A * es el algoritmo habitual para fines pedagógicos, pero la búsqueda de reposo es una idea similar en juegos de 2 jugadores). Esta es solo una función que proporciona una estimación del valor de un estado del juego. En lugar de considerar todos los movimientos en un juego, solo puede considerar movimientos hacia una distancia finita por delante, y luego usar el valor de la heurística para juzgar el valor de los estados que alcanzó. Si su heurística es consistente (esencialmente: si siempre sobreestima la calidad de los estados), entonces esto dará la respuesta correcta, pero con enormes aceleraciones en la práctica.
Utilice Rollouts (como Monte Carlo Tree Search). Básicamente, en lugar de considerar cada movimiento, ejecuta algunos miles de juegos simulados entre jugadores que actúan al azar (esto es más rápido que considerar todos los movimientos posibles). Asigne un valor a los estados igual a la tasa de ganancia promedio de los juegos a partir de él. Es posible que esto no produzca la respuesta correcta, pero en algunos tipos de juegos, funciona de manera confiable. A menudo se usa como una extensión de técnicas más exactas, en lugar de usarse solo.
¿A * realmente no parece encajar en el contexto de los juegos de dos jugadores como lo hacen los otros algoritmos? Nota sobre MCTS: las implementaciones típicas no "consideran todos los movimientos a una profundidad fija" y luego inician los despliegues; en cambio, las implementaciones típicas dinámicamente, hacen crecer gradualmente el árbol de búsqueda de árboles, creciéndolo más en partes más prometedoras (partes donde la estrategia de Selección impulsa muchos despliegues), haciéndolo menos en las partes menos prometedoras.
Dennis Soemers
1
@JohnDoucette, ¿por qué diría que "ninguno de estos algoritmos es práctico para el trabajo moderno, pero son buenos lugares para comenzar pedagógicamente"? En el caso de MCTS, parece muy apropiado para el trabajo moderno incluso para la búsqueda de un jugador cuando la transición al siguiente estado dado un estado y una acción está bien definida. ¿Estarías de acuerdo?
Miguel Saraiva
1
@MiguelSaraiva Por sí solo, MCTS no es algo que normalmente usarías para una aplicación moderna. Sin embargo, combinado con algo como un DNN para proporcionar una heurística aprendida sería bastante bueno.
John Doucette
1
@JohnDoucette "MCTS no es algo que normalmente usarías para una aplicación moderna". En primer lugar, la "modernidad" a la que te refieres tuvo su gran avance en 2016 (MCTS + DNN) y parece que estás implicando que todo lo anterior es obsoleto (obviamente falso). De hecho, incluso podría ser más plausible decir que MCTS normalmente no se usa por lo contrario: es DEMASIADO avanzado: hay un montón de aplicaciones en la industria que son realmente obsoletas y podrían ACTUALIZARSE a MCTS. Para muchos de estos MCTS + DNN es solo un sueño lejano, ya que el entrenamiento previo es prácticamente inconcebible.
Johan
1
@Johan Eso me parece adecuado para aplicaciones industriales , pero la pregunta es sobre "un juego de mesa como las damas". Para ese tipo de problemas con los juguetes, creo que MCTS no es el enfoque moderno correcto. Sin embargo, definitivamente hay muchos problemas en el mundo real en los que sería una gran mejora en los sistemas implementados existentes.
John Doucette
6
NB La razón por la que solo elegí estos tres algoritmos se debió al tiempo que tengo disponible para comprenderlos. De un poco de investigación, descubrí que estos algoritmos están básicamente entrelazados con el algoritmo minimax. Entonces, si puedo entender uno, los otros dos simplemente encajarán.
Dado este contexto, recomendaría comenzar con Minimax . De los tres algoritmos, Minimax es el más fácil de entender.
Alpha-Beta , como otros han mencionado en otras respuestas, es una mejora estricta además de Minimax. Minimax es básicamente una parte de la implementación de Alpha-Beta, y una buena comprensión de Alpha-Beta requiere comenzar con una buena comprensión de Minimax de todos modos. Si le queda tiempo después de comprender e implementar Minimax, le recomiendo pasar a Alpha-Beta después y construirlo sobre Minimax. Comenzar con Alpha-Beta si aún no comprende Minimax realmente no tiene sentido.
Monte-Carlo Tree Search es probablemente un poco más avanzado y más complicado de entender realmente. En la última década más o menos, MCTS realmente ha estado creciendo para ser mucho más popular que los otros dos, por lo que desde ese punto de vista, comprender MCTS puede ser más "útil".
La conexión entre Minimax y MCTS es menos directa / obvia que la conexión entre Minimax y Alpha-Beta, pero aún existe una conexión al menos a nivel conceptual. Yo diría que tener una buena comprensión de Minimax primero sigue siendo beneficioso antes de sumergirse en MCTS ; en particular, comprender Minimax y sus defectos / puntos débiles puede proporcionar un contexto útil / ayudarlo a comprender por qué MCTS se volvió "necesario" / popular.
Para concluir, en mi opinión:
Alpha-Beta es estrictamente mejor que Minimax, pero también está fuertemente relacionado / construido sobre Minimax; entonces, comience con Minimax, vaya a Alpha-Beta después si el tiempo lo permite
MCTS tiene diferentes fortalezas / debilidades, a menudo es mejor que Alpha-Beta en problemas "modernos" (pero no siempre), una buena comprensión de Minimax probablemente será beneficiosa antes de comenzar a sumergirse en MCTS
¿Hay algún otro algoritmo que sugiera que yo también pueda usar? Eso es como un nivel de poda alfa beta
Joey
@Joey Hmm no, no realmente. Minimax es un punto de partida muy natural, lo recomiendo encarecidamente si recién está comenzando. Ese fue básicamente el primer algoritmo desarrollado para juegos como ajedrez / damas / tic tac toe / lo que sea. Posteriormente, se desarrollaron cientos, si no miles de mejoras, muchas de las cuales probablemente pueda encontrar en chessprogramming.wikispaces.com/Search . Alpha-Beta es la mejora más natural a tener en cuenta además de Minimax.
Dennis Soemers
@Joey Monte-Carlo Tree Search es un poco diferente (no necesariamente tiene Minimax como base), es interesante, divertido, popular y altamente relevante en la IA "moderna". Aún así, las bases son importantes, no recomendaría comenzar con MCTS de inmediato si aún no comprende Minimax + Alpha-Beta, aunque técnicamente sea posible.
Dennis Soemers
Gracias por ese sitio. Es una gran cantidad de conocimiento que ahora puedo leer. Lo más difícil de aprender cosas nuevas es encontrar el material correcto para ayudarlo a comprender. Así que gracias de nuevo por el sitio
Joey
@Joey No estoy 100% seguro de si la programación de ajedrez es el sitio más fácil para aprender (y parece haber un aviso aterrador en la parte superior de que el sitio puede estar desapareciendo a fines de julio). Si no recuerdo mal, muchas descripciones son bastante cortas / probablemente no fáciles de entender si eres un principiante en el campo. Sin embargo, al menos será una buena colección completa de nombres de todo tipo de algoritmos / mejoras, y puede intentar buscar las fuentes originales o buscar en Google todos esos nombres para obtener información más detallada en otro lugar.
Dennis Soemers
1
Si tiene que elegir entre la poda Minimax y Alpha-Beta, debe elegir Alpha-beta. Es más eficiente y rápido porque puede podar una parte sustancial de su árbol de exploración. Pero debe ordenar las acciones de mejor a peor dependiendo del punto de vista máximo o mínimo, para que el algoritmo pueda darse cuenta rápidamente si la exploración es necesaria.
Dado este contexto, recomendaría comenzar con Minimax . De los tres algoritmos, Minimax es el más fácil de entender.
Alpha-Beta , como otros han mencionado en otras respuestas, es una mejora estricta además de Minimax. Minimax es básicamente una parte de la implementación de Alpha-Beta, y una buena comprensión de Alpha-Beta requiere comenzar con una buena comprensión de Minimax de todos modos. Si le queda tiempo después de comprender e implementar Minimax, le recomiendo pasar a Alpha-Beta después y construirlo sobre Minimax. Comenzar con Alpha-Beta si aún no comprende Minimax realmente no tiene sentido.
Monte-Carlo Tree Search es probablemente un poco más avanzado y más complicado de entender realmente. En la última década más o menos, MCTS realmente ha estado creciendo para ser mucho más popular que los otros dos, por lo que desde ese punto de vista, comprender MCTS puede ser más "útil".
La conexión entre Minimax y MCTS es menos directa / obvia que la conexión entre Minimax y Alpha-Beta, pero aún existe una conexión al menos a nivel conceptual. Yo diría que tener una buena comprensión de Minimax primero sigue siendo beneficioso antes de sumergirse en MCTS ; en particular, comprender Minimax y sus defectos / puntos débiles puede proporcionar un contexto útil / ayudarlo a comprender por qué MCTS se volvió "necesario" / popular.
Para concluir, en mi opinión:
fuente
Si tiene que elegir entre la poda Minimax y Alpha-Beta, debe elegir Alpha-beta. Es más eficiente y rápido porque puede podar una parte sustancial de su árbol de exploración. Pero debe ordenar las acciones de mejor a peor dependiendo del punto de vista máximo o mínimo, para que el algoritmo pueda darse cuenta rápidamente si la exploración es necesaria.
fuente