Pop

Curso programación C# - 79. Inteligencia Artificial con C# (8)- Visual Studio 2017

79. Inteligencia Artificial (8).Algoritmo minimax

 -  En este capítulo del curso de programación en c# con visual studio 2017 vamos a continuar con nuestra serie de entradas relacionadas con un tema de moda: la inteligencia artificial. En la entradas anterior enseñamos a nuestro agente mecanismos para evitar el jaque de nuestro adversario.

- En esta ocasión finalizamos nuestro ajedrez validando en que situaciones finaliza el juego por producirse jaque mate . Además os dejo las nociones teóricas para la implementación del algoritmo minimax.

-  Minimax lo que hace informalmente es considerar todos los casos que se pueden dar desde donde estás y en base a esto,  elegir el movimiento que te lleve a un resultado mejor asumiendo que el contrario hará el movimiento que más te perjudique.El algoritmo Minimax es el algoritmo más conocido (y utilizado) para juegos de 2 adversarios, movimientos alternos (“ahora tú, ahora yo”). No se puede utilizar en juegos donde hay “azar”, sino perfectamente definido como las tres en raya y el ajedrez.  El problema de Minimax es que el árbol de estados que crea es muy grande para juegos como el ajedrez. Os dejo la imagen del posible  de movimientos de una posible jugada y el vídeo donde lo explico:



Explicación:




-Minimax es un algoritmo recursivo (https://es.wikipedia.org/wiki/Minimax). El funcionamiento de minimax puede resumirse como elegir el mejor movimiento para ti mismo suponiendo que tu contrincante escogerá el peor para ti.

-  Pasos del algoritmo minimax:

  • Generación del árbol de juego. Se generarán todos los nodos hasta llegar a un estado terminal.
  • Cálculo de los valores de la función de utilidad para cada nodo terminal. 
  • Calcular el valor de los nodos superiores a partir del valor de los inferiores. Según nivel si es MAX o MIN se elegirán los valores mínimos y máximos representando los movimientos del jugador y del oponente, de ahí el nombre de minimax. 
  • Elegir la jugada valorando los valores que han llegado al nivel superior. El algoritmo explorará los nodos del árbol asignándoles un valor numérico mediante una función de evaluación, empezando por los nodos terminales y subiendo hacia la raíz. La función de utilidad definirá lo buena que es la posición para un jugador cuando la alcanza. 
  • En el caso del ajedrez los posibles valores son (+1, 0 ,-1) que se corresponden con ganar, empatar y perder respectivamente. 

* Finalmente os dejo el código  del proyecto completo  en visual studio en este archivo rar:




1 comentario:

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...