Bajar Archivo Tres en raya

Anuncio
APLICACIÓN DE LA BÚSQUEDA ENTRE ADVERSARIOS: TRES EN RAYA
Leissi Castañeda-León1
Nils Murrugarra-Llerena
[email protected]
1, 2
[email protected]
1
Renzo Berrú-Ancajima
[email protected]
1Universidad Nacional de Trujillo – Perú
2
Sociedad de Estudiantes de Ciencia de la Computación
RESUMEN
El presente trabajo propone la realización de una
aplicación en una de las áreas temáticas muy estudiadas
de la Inteligencia Artificial como lo es la Búsqueda
entre Adversarios, muy a menudo conocido como
juegos; comenzando en la definición de un movimiento
óptimo y un algoritmo para encontrarlo. En este caso se
utilizó el algoritmo: “MINIMAX”, con funciones de
evaluación “HEURÍSTICA”, los mismos que fueron
implementados, en un juego muy bien conocido: el Tres
en Raya.
juego, hasta tal punto que las máquinas han superado a
la gente en las damas y en Otelo, han derrotado a
campeones humanos (aunque no siempre) en ajedrez y
backgammon, y son competitivos en muchos otros
juegos [1].
Continuaremos con una introducción a las
Decisiones óptimas en juegos, Estrategia y Poda AlfaBeta (sección 2), el algoritmo Mínimax más la
heurística utilizado en la implementación de nuestro
trabajo (sección 3), Experimentos y Resultados
obtenidos, y a la vez discusión de los mismos (sección
4), nuestras conclusiones (sección 5) y por último
presentamos nuestras referencias.
Palabras Claves: Inteligencia Artificial, Minimax,
Heurística, Búsqueda, Agente, Poda.
1.
INTRODUCCIÓN
Una de las áreas temáticas muy bien estudiadas a
sus inicios de la Inteligencia Artificial fue el de juegos,
o también conocidos dentro de la misma como entornos
competitivos.
En este caso el entorno competitivo es una entorno
determinista, por está ligada por dos jugadores cada uno
con un turno respectivo y un conjunto de acciones
posibles.
Por 1950, casi tan prontito corno los computadores
se hicieron programables, el ajedrez fue abordado por
Konrad Zuse (el inventor del primer computador
programable y del primer lenguaje de programación),
por Claude Shannon (el inventor de la teoría de la
información), por Norbert Wiener (el creador de la
teoría de control moderna), y por Alan Turing. Desde
entonces, hubo un progreso continuo en el nivel de
2. BÚSQUEDA ENTRE ADVERSARIOS:
DECISIONES ÓPTIMAS EN JUEGOS
En el desarrollo de los juegos de dos jugadores, a
uno se le denominará MAX y al otro MIN, cada uno
con su turno correspondiente, donde MAX viene a ser
quien da inicio a la jugada, luego continúa el del
siguiente turno y así sucesivamente hasta llegar al
estado final de una jugada, donde se obtiene el ganador
respectivo con cierto valor de utilidad obtenido en la
búsqueda de la jugada a realizar.
Esta búsqueda realizada se puede definir en base a:
un Estado Inicial, Movimientos Posible o Legales
(Sucesores), un Estado Final, Valor o Función de
Utilidad; los mismos que a su vez vienen a definir un
árbol de juego y donde se desarrollará primero una
búsqueda en profundidad.
2.1. Estrategia Óptima
Usualmente se puede decir en una Búsqueda
cualquiera, la estrategia óptima se logra alcanzar
cuando tras un conjunto de movimientos posibles
se llega a la meta u objetivo que viene a ser el
estado ganador; sin embargo, la estrategia óptima
que aquí hablamos no va por ese camino, sino mas
bien consideramos que tras la realización de una
jugada MAX, viene una jugada MIN y tras la
misma viene otra MAX y así sucesivamente hasta
llegar al objetivo, obteniendo resultados buenos ya
que con esta estrategia estamos considerando al
contrincante como infalible, muy bueno.
Esta estrategia óptima, puede ser vista en el
árbol de juego, evaluando la función del Valor
Mínimax en cada nodo, a través de:
Utilidad(n)
Si n es terminal
Valor Mínimax(n) = Max(Valor Mínimax) Si n es estado max
Min(Valor Mínimax) Si n es estado min
Veamos esta definición mediante el siguiente
ejemplo:
Fig. 1. Ejemplo de un árbol Mínimax [1]
Donde según la Fig. 1. los nodos terminales se
encuentran etiquetados por sus valores de utilidad.
En el caso del primer nodo (B) tiene tres sucesores
con valores 3, 12 y 8, donde según su estado actual,
el Valor Mínimax es 3. En este ejemplo el nodo
raíz tiene estado de Max, y tiene como sucesores a
los valores: 3, 2 y 2, siendo para este caso el Valor
Mínimax 3. Es así que se va dando la decisión más
óptima.
2.2. Poda Alfa Beta
Existe un problema en el Algoritmo Mínimax,
el cual tiene que ver con la complejidad del mismo,
ya que el número de estados a examinar o evaluar
es exponencial en el número de movimientos. Sin
embargo aunque este exponente no se pueda
eliminar, existe una posibilidad de reducirlo a la
mitad, y esto mediante la realización de una Poda
al árbol mínimax.
Veamos entonces la realización de la decisión
óptima, con la poda aplicada al ejemplo anterior
(mostrado en la Fig, 1), mediante los pasos
mostrados en la siguiente figura:
de usar heurística para cada posible movimiento. Los
pasos generales implementados son:
Se genera un árbol de profundidad 3 (definida
por nosotros) para cada jugada.
Se aplica la función heurística para cada
terminal.
En forma recursiva se avanza hacia las hojas
del árbol, y de acuerdo a lo que toca, bien se
minimiza o bien se maximiza en los nodos
hojas, y los valores escogidos pasan hacia sus
nodos padres, y así sucesivamente hasta llegar
al nodo raíz.
Al valor final que resulta llegando a la raíz se
lo conoce como “minimax”.
Fig. 2. Ejemplo de pasos de la realización
de la Poda Alfa-Beta [1]
En la Fig. 2 lo que vimos, fueron los pasos para una
decisión óptima, junto con la realización de una poda, a
la cual la denominan: Poda Alfa-Beta y a la vez
mostrando en cada nodo un rango de posibilidades. En
(a) Como la primera hoja debajo de B tiene valor 3, y
siendo B un Nodo MIN, entonces éste tiene como valor
máximo al 3. (b) La segunda hoja de B tiene valor 12,
entonces MIN evitará este movimiento. (c) El último
nodo hoja tiene valor de 8, entonces el valor de B queda
en 3 y éste mismo sería para el nodo raíz hasta el
momento. (d) La primera hoja debajo de C es de valor
2, se dice entonces ya que C es un nodo MIN con el
máximo valor de 2, y B vale 3, el nodo raíz MAX
nunca elegiría a C, entonces no es necesario el mirar a
sus otros sucesores. (e) La primera hoja de D es 14, y
como éste es más alto que el de B, entonces existe la
necesidad de seguir viendo el resto de nodos hojas. (f)
Siguiendo con los sucesores de D, llegamos hasta el
nodo de valor 2, que viene a ser el valor de D.
Finalmente el nodo raíz tomará la decisión de moverse
hacia el nodo B, dando un valor de 3.
Se puede decir que una de las ventajas que tenemos
con la poda Alfa-Beta, según [1], es que ésta se puede
aplicar a árboles de cualquier profundidad.
3. ALGORITMO MÍNIMAX + HEURÍSTICA
Este algoritmo de por sí es un algoritmo que aplica
búsqueda en profundidad. Nuestro algoritmo
MINIMAX, desarrollado tiene además, la particularidad
Ahora veámoslo desde un punto de vista más
detallado los algoritmos para determinar la heurística y
el minimax (recordando que nuestro trabajo está bajo el
concepto de Programación Lógica y Recursividad):
Entradas:
- T, Tablero (lista de listas)
- NP, Nro de Pc (entero)
Salidas:
- H, Valor Heurístico (entero)
H1, N1←Determinar Heurística1 (T, NP)
H2←Determinar Heurística2 (T, NP)
H3←Determinar Heurística3 (T, NP)
H4=H1+H2+H3
NPC=Cambiar Numero de Pc (NP)
H5, N2←Determinar Heurística1 (T, NPC)
H6←Determinar Heurística2 (T, NPC)
H7←Determinar Heurística3 (T, NPC)
H8=H4 – (H5+H6+H7)
H9←Determinar Heurística4 (N1, N2)
H=H8+H9
Algoritmo 1. Determinar Heurística
Cada determinar Heurística (1, 2, 3 y 4)
mencionado en el Algoritmo 1, tiene una función de
evaluación y un valor de Heurística respectivo, de
acuerdo al estado actual del árbol minimax y éstos
valores heurísticos pueden ser de: (véase Fig. 3, 4, 5 y
6):
Fig. 3. Caso de valor heurística igual a 3
(para Determinar Heurística1)
Fig. 4. Caso de valor heurística igual a 5
(para Determinar Heurística2)
Fig. 5. Caso de valor heurística igual a 100
(para Determinar Heurística3)
Fig. 6. Caso de valor heurística igual a 10
(para Determinar Heurística4)
Ahora presentaremos el Algoritmo Minimax:
Entradas:
- T, Tablero (Lista de listas)
- P, Profundidad (entero =0)
- Tu,Turno (entero)
- NP, Nro de Pc (entero)
Salidas:
- H, Valor Heurístico (entero)
- TN, Nuevo Tablero (Lista de listas)
H←Determinar Heurística1 (T, NP)
Corte (!).
Algoritmo 2. Calcular Minimax sólo para Determinar
Heurística, siendo la profundidad igual a 0.
Entradas:
- T, Tablero (Lista de listas)
- P, Profundidad (entero =0)
- Tu,Turno (entero)
- NP, Nro de Pc (entero)
Salidas:
- H, Valor Heurístico (entero)
- TN, Nuevo Tablero (Lista de listas)
Verificar si es Nodo Terminal (T)
H←Determinar Heurística1 (T, NP)
Corte (!).
Algoritmo 3. Calcular Minimax si es nodo terminal.
Ahora veremos el Algoritmo Minimax, para el caso
de Maximizar:
Entradas:
- T, Tablero (Lista de listas)
- P, Profundidad (entero =0)
- Tu,Turno (entero)
- NP, Nro de Pc (entero)
Salidas:
- H, Valor Heurístico (entero)
- TN, Nuevo Tablero (Lista de listas)
Verificar si P diferente de 0
Ver si Tu es 1
Determinar los posibles tableros (lista de tableros).
PN←Disminuir la profundidad (P)
TuN←Cambiar Turno (Tu)
Calcular el Minimax de los nodos de los posibles
tableros (de la lista de tableros)
H←Calcular el máximo
TN←Determinar el nodo correspondiente al H máximo
Corte (!).
Algoritmo 4. Calcular Minimax para maximizar.
4. EXPERIMENTOS Y RESULTADOS
Presentaremos un ejemplo de cómo trabaja nuestra
implementación del minimax con la heurística en el tres
en raya. Por ejemplo para determinar la heurística del
tablero maximizando (véase Fig. 7):
Fig. 7. del Valor de Heurística, maximizando.
6.
CONCLUSIONES
Podemos decir que es un trabajo orientado a que la
máquina o PC “piense” un movimiento óptimo.
Es posible añadir PODA: Alfa-Beta
Es posible aumentar o disminuir la profundidad
para la obtención de mejores resultados, por parte del
programa.
REFERENCIAS
[1] Stuart J. Russell, Peter Norvig - Inteligencia
Artificial, Un Enfoque Moderno - Prentice Hall,
capítulo 6: Búsqueda entre Adversarios, pág. 207.
Descargar