Transcript juegos

Tema 1: Técnicas heurísticas en juegos

• • • • • Introducción Estrategias básicas: Estrategia exhaustiva: MiniMax Estrategia de poda: alfa-beta • Estrategia: SSS* • Estrategia de test previo: Scout • • • Técnicas avanzadas.

Técnica de bajada progresiva.

Poda heurística.

Continuación heurística.

Introducción

 ¿Porqué los juegos en Inteligencia Artificial?

 Historia:  Wolfgam Kempelem, el ajedrecista mecánico 1760.

 El Ajedrecista

,

Leonardo Torres Quevedo, 1912.      Turing 1952.

Shanon.

Arthur Samuel, damas, 1963.

El campo de batalla: El Ajedrez.

Nuevos retos: El GO.

¿Porqué los juegos en Inteligencia Artificial?

 Entorno controlado.

    REGLAS CONCISAS.

Se requiere “inteligencia”.

La máquina imita al humano.

Fácil evaluación.

Introducción

 Programación de las máquinas para juegos de estrategia  Basados en búsqueda (complejos espacios de búsqueda)    La existencia de un oponente introduce incertidumbre Existen limitaciones en el tiempo de respuesta Pueden competir contra la inteligencia humana  En general, se trata de construir sistemas que sean capaces de tomar decisiones en un entorno adverso.

Introducción

 Tipos de juegos:  Información completa, deterministas:    ajedrez, damas Información completa, con azar:  backgammon Información incompleta, con azar:  juegos de cartas

Características y ejemplos

 Características de los juegos que vamos a estudiar en este tema:   Juegos bipersonales.

Los jugadores mueven alternativamente.

    La ventaja para un jugador es desventaja para el otro.

Los jugadores poseen toda la información sobre el estado del juego.

Hay un número finito de estados y decisiones.

No interviene el azar (reglas y configuración jugada).

Características y ejemplos

Ejemplos de juegos de ese tipo:

 Ajedrez, damas, go, otelo, 3 en raya, nim, ...

Ejemplos de juegos que no son de ese tipo:

 Backgammon, poker, bridge, ...

Historia

 El turco.

 Wolfgang von Kempelen en 1769.

 En 1809, el Turco derrotó a Napoleón Bonaparte.

Historia

 El turco.

Historia

   Leonardo Torres Quevedo.

El ajedrecista hizo su debut durante la Feria de París de 1914, generando gran expectación en aquellos tiempos y hubo una extensa primera mención en la Scientific American como "

Torres and His Remarkable Automatic Device

“.

Jugaba automáticamente el final rey y torre contra rey desde cualquier posición sin ninguna intervención humana.

Historia

   En 1952 Turing escribió un programa de ajedrez. A falta de una computadora lo suficientemente potente como para ejecutarlo, él simulaba el funcionamiento de la computadora, tardando más de hora y media en efectuar un movimiento. Una de las partidas llegó a registrarse; el programa perdió frente a un amigo de Turing.

Historia

    Claude Shannon.

Se dio cuenta que el gran problema de las máquinas que pretendiesen jugar al ajedrez sería el gran número de evaluaciones.

A Strategy: búsqueda exhaustiva, hardware. Shannon predijo que buscando las 30^6 (más de 700.000.000) posiciones contenidas en los primeros tres movimientos (de ambos bandos, lo que son 6 plies), tardaría aproximadamente 16 minutos, incluso en el caso "muy optimista" que el programa evaluara un millón de posiciones por segundo. 40 años para conseguir esa velocidad. B Strategy: cortar las ramas de evaluación y reducir el número de evaluaciones de forma inteligente. Software. Los Maestros internacionales evalúan entre 50-60 posiciones.

Historia

    Arthur L. Samuel. 1963.

Pensaba que enseñar a las computadoras jugar juegos era muy útil para desarrollar tácticas apropiadas para problemas generales. Las damas son simples pero tienen una compleja estrategia.

Chinook 1989 - 2007. El problema ha sido completamente resuelto explorando todas las posibles posiciones.

Historia

Ajedrez: El campo de Batalla

 En 1968, el MI David Levy realizó una famosa apuesta, en la cual afirmaba que ninguna computadora de ajedrez sería capaz de derrotarle en diez años, bajo condiciones de torneo. Ganó la apuesta en 1978, venciendo por 3'5-1'5.

Historia

• Deep blue

• Feng-hsiung Hsu y Murray Campbell desarrollaron un chip dedicado al cálculo de jugadas llamado ChipTest. • Escrito en C, era capaz de evaluar 200 millones de posiciones por segundo.

Historia

 Deep blue vs Kasparov  1996  1997

Historia

 Profundidad de búsqueda vs ELO

Historia

 2005 - Un equipo de computadoras (Hydra, Deep Junior y Fritz), gana 8.5-3.5

contra un fuerte equipo de humanos formado por Veselin Topalov, Ruslan Ponomariov y Sergey Karjakin, que tenía una media de ELO de 2681.  2006 - En el campeonato del mundo oficioso, Vladimir Kramnik es derrotado por Deep Fritz 4-2 .

Historia

  http://www.bobby-fischer.net/bobby_fischer_video_18.htm

http://www.youtube.com/watch?v=NJarxpYyoFI

Historia

       Nuevos retos: EL GO.

El tablero es muy grande 19x19, 361 intersecciones.

Hay muchos movimientos posibles.

Complejidad creciente.

Función de evaluación. difícil de definir.

Nivel de aficionado.

Estrategias básicas:

  Objetivo: búsqueda de la mejor jugada Nos centraremos en un juego genérico.

   Dos jugadores, jugando por turnos.

Cada jugador está perfectamente informado de las reglas del juego y conoce en todo momento la configuración de cada jugada ( no hay azar ).

De estos dos jugadores cada uno intenta ganar para sí Puede existir un estado de empate.

. Si decimos que un jugador gana, el otro pierde y viceversa.  Etiquetamos a los jugadores con gane dicho jugador.

MAX y MIN . Por norma siempre empezará a jugar MAX y vamos a querer que

Estrategias básicas:

  Estado(N): configuración del juego en un momento dado.

Árbol de juego. Cada arista de ese árbol indica un posible movimiento. Una rama completa contempla una posible jugada .

  En cada nivel se van alternando los jugadores .

Factor de ramificación : número de posibles movimientos que se pueden realizar.

Á

rboles de juego: tres en línea

Estrategias básicas:

 Imposible generar todo el árbol de búsqueda   Generar hasta un determinado nivel de profundidad.

Aplicar alguna función de evaluación f(N).

    Devuelve un valor numérico cómo de bueno es un estado.

MAX

max

imizará esta función y MIN

min

imizará dicha función.

En algunos casos la función nos puede devolver valores como PIERDE, GANA o EMPATA, siempre referidos a MAX.

Objetivo del análisis del árbol: determinar valor del nodo raíz (inicio de la jugada). A este valor se le denomina valor MiniMax.

Árboles de juego

  Representación de todas las posibles situaciones que se pueden dar en el juego, a partir de un estado dado Cada nivel corresponde a un jugador (el primero para MAX).

Estrategia exhaustiva: MiniMax

   El problema de decidir el movimiento adecuado.

En su turno, la máquina debe decidir que movimiento hacer.

Idea:

   En cada turno, nodo raíz sea la situación actual, desarrollándolo hasta los estados finales.

construir el árbol de juego completo

cuyo

Valorar

los finales según la función de utilidad.

Propagar

hacia arriba los valores de la función.

Elegir

el movimiento que lleve al estado sucesor del actual con mejor valoración.

Estrategia exhaustiva: MiniMax

La propagación de valores se hace según el principio

minimax

:

MAX siempre escogerá lo mejor para MAX y MIN lo peor para MAX.

Un nodo de MAX toma el valor del sucesor con mayor valor.

Un nodo de MIN toma el valor del sucesor con menor valor

Heurística: función de evaluación estática

  Función de evaluación estática:    Dado un estado del juego y un turno, es una estimación de la bondad de tal situación respecto de MAX En los estados finales , deberá coincidir con la de utilidad Esta función heurística codifica todo el conocimiento que poseemos acerca del juego   Cuanto mayor el valor, mejor el estado para MAX Lo importante es la comparación del valor entre los estados Calidad de la f.e.:    En estados terminales f.e.=f.u.

¡Su cálculo no debe ser muy lento!. Compromiso precisión-costo en tiempo.

La f.e. debe reflejar con precisión las posibilidades reales de ganar.

Heurística: función de evaluación estática

Implementación:

  En lo que sigue, asumiremos que en lugar de una función f-utilidad(estado,turno), disponemos de una función f-e-estatica(estado,turno), definida sobre todos los estados También necesitaremos dos variables: *maximo valor* y *minimo-valor* almacenando, respectivamente, cotas para el mayor y el menor valor que puede tomar la función de evaluación estática

Complejidad de minimax

   Complejidad:  Sea r es el factor de ramificación y m el nivel de profundidad.

 Complejidad en tiempo: O(r m ).

 Complejidad en espacio: O(rm).

Aún es ineficiente en la práctica:  En el ajedrez, con 150 segundos por turno, solo sería posible analizar 150000 nodos, luego sólo se podría generar un árbol de profundidad menor que 4  Por tanto, la calidad del juego de la máquina será muy baja (un jugador humano medio puede planificar al menos 6 jugadas por adelantado) La poda alfa-beta mejora :  En algunos casos, es posible podar el árbol sin que afecte a la decisión que se toma finalmente

Estrategia de poda: alfa-beta

Minimax con poda alfa-beta

Idea

: •Cada nodo se analiza teniendo en cuenta el valor que por el momento tiene y el valor que por el momento tiene su padre posibles valores que podría tomar el nodo (  ,      menos) o menos) y es el valor actual del padre (que tendría eso o más)  

Minimax con poda alfa-beta

  •Y no hace falta analizar los restantes sucesores del nodo

•A

Minimax con poda alfa-beta

•B •C (6,+inf) •D 6 (10,6) 6 (6,10)

Minimax con poda alfa-beta

Complejidad de alfa-beta

 Complejidad:  Sea r es el factor de ramificación y m el nivel de profundidad.

 Complejidad en tiempo: O(r 3m/4 ).

  Complejidad en espacio: O(rm).

En la práctica, si los sucesores se exploran en orden de valor minimax (creciente o decreciente dependiendo de si es un nodo MIN o MAX, resp.), se produce la máxima poda, y en ese caso la complejidad temporal es O(r m/2 )

Complejidad de alfa-beta

  Esto hace que en el mismo tiempo se puedan considerar el doble de jugadas por adelantado (haciendo a la máquina más competitiva) Métodos (aproximados) para generar los sucesores en orden:   Usar el valor de la función de evaluación estática para ordenar Usar búsqueda en profundidad iterativa y guardar los valores minimax calculados en cada iteración

SSS*

      Mejora, en algunos casos al algoritmo alfa beta: ordenación de los nodos terminales.

Desventaja: incremento de la complejidad espacial.

SSS* utiliza subárboles del árbol de juego (normalmente ramas de dicho árbol).

Estos subárboles tienen asignados el límite inferior más alto de sus constituyentes.

 El valor asignado al subárbol siempre será mayor o igual que la mejor solución encontrada dentro de ese subárbol.

El valor asignado a un subárbol permite realizar la ordenación.

Suponemos que empieza jugando MAX por lo que buscamos el valor más alto posible entre todos los valores asignados a los nodos terminales.

SSS*

    SSS* utiliza la notación decimal de Dewey para representar los nodos en el árbol.

 Nodo raíz:ε  Resto de nodos: N.n (hijo n, desde la izquierda, del nodo N).

Tripleta(N, s, h) para cada estado    N: numeración del nodo.

s = {VIVO, SOLUCIONADO}: estado de la solución de N.

h = [ ∞, +∞] es el valor del estado.

Un nodo etiquetado con VIVO indica que aún se puede seguir generando sucesores del nodo, SOLUCIONADO generados.

indica que todos los sucesores ya han sido

SSS*

 Funcionamiento en dos etapas:   Generación de un conjunto de ramas, expandiendo el primer hijo si se trata de un nodo MIN y todos los hijos si se trata de un nodo MAX.

Seleccionando estados según su valor h, se generan sucesores de los nodos no solucionados hasta que se solucionen. En el caso de que un nodo esté solucionado se soluciona el padre (si es nodo MIN o el último hermano de un MAX) o se genera el siguiente hermano, en el caso de tratarse de un nodo MAX que no sea último hermano.

SSS*

SSS*

SSS*

 Ejemplo de ejecución del algoritmo SSS*

SCOUT

  Condición indispensable: se dispone de un método rápido para comprobar desigualdades.

 Conocemos una función que permite comprobar si el valor MiniMax de un nodo es menor o mayor que un determinado valor.

SCOUT utiliza dos rutinas  TEST : Resuelve la desigualdad. Parámetros de entrada:     Nodo al que aplicar el test.

Valor de comparación.

Desigualdad a aplicar (> ó ≥).

Salida: verdadero o falso, según se cumpla o no la desigualdad.

 EVAL : Calcula el valor MiniMax de un nodo.

 Hace uso de TEST para comprobar si debe explorar una determinada rama.

SCOUT

SCOUT

SCOUT

SCOUT

 

Negascout:

ventana (α, α+1) En ajedrez se ha estimado una mejora del rendimiento del 10%.

function negascout(node, depth, α, β) if node is a terminal node or depth = 0 return the heuristic value of node b := β foreach child of node v := -negascout (child, depth-1, -b, α) if α < v < β and not the first child v := -negascout(child, depth-1, β, -v) (* re-búsqueda *) α := max(α, v) if α≥β return α (* poda *) b := α+1 (* nueva ventana *) return α

Técnicas avanzadas

     Uso de movimientos de libros Técnica de bajada progresiva Poda heurística Continuación heurística Poda “movimiento nulo” (null-move prunning)  Transposition table

Técnicas avanzadas

     Imposible seleccionar siempre un movimiento consultando la configuración actual del juego en un catálogo y extrayendo el movimiento correcto.

Razonable para algunas partes de ciertos juegos.

 En ajedrez, tanto la secuencia de apertura como los finales están muy estudiados.

El rendimiento del programa puede mejorarse proporciona una lista de movimientos (de libro) que deberían realizarse en dichos casos.

si se le Se usa el libro en las aperturas y los finales combinado con el procedimiento MiniMax para la parte central de la partida Conocimiento + búsqueda

Técnica de bajada progresiva

  Restricciones de tiempo: algoritmos presentados anteriormente no adecuados.

Técnica de bajada progresiva   Recorrer nodos por niveles.

Al llegar la petición de jugada, devolver la solución del último nivel que se haya completado.

Técnica de bajada progresiva

     No se produce una evaluación de excesivos nodos (comparando con métodos anteriores): El número de nodos terminales de un árbol con un factor de ramificación de B y una profundidad de d es igual a B d nodos.

El número de nodos no terminales en dicho árbol se puede calcular con la serie: B 0 +B 1 +..+B d-1 = (B d -1)/(B-1) Al dividir el número de nodos terminales entre el número de nodos no terminales: B d (B-1)/(B d -1) ≈ B-1 El número de nodos terminales es B-1 veces mayor que el número de nodos no terminales, por lo que no se produce sobre evaluación de nodos.

Poda heurística

   Objetivo: reducir B desarrollando únicamente los mejores movimientos de cada nivel.

g(N): Función adicional de evaluación    De bajo coste.

Versión simplificada de f(N).

Reordenación de nodos: el primer nodo de un nivel es el de mayor g(N).

Factor de ramificación:

Factor(Nodo) = Factor(Padre(Nodo)) - Rango(Nodo)

Continuación heurística

    Intento de evitar el efecto horizonte .

Provocado por la limitación en profundidad: solo se puede tener conocimiento hasta la profundidad seleccionada.

Secuencia:    Desarrollar en anchura hasta un determinado nivel.

Seleccionar un subconjunto de nodos terminales para desarrollar búsquedas más profundas.

Selección dada por un conjunto de heurísticas directamente relacionadas con el juego.

En ajedrez:    Rey en peligro.

Peón a punto de convertirse en dama.

Jaque….

Movimiento nulo

     Null-move forward prunning permite a un programa de ajedrez reducir de forma drástica el factor de ramificación con un cierto riesgo de perder información importante.

Chrilly Donniger, 1993. La idea es dar al oponente una jugada de ventaja , y si tu posición sigue siendo buena, (alfa mayor que beta), se asume que el alfa real seguirá siendo mayor que beta y por tanto podamos esa rama y seguimos examinando otros nodos.

No se suelen permitir dos movimientos nulos seguidos.

Inestabilidad en la búsqueda. Los valores de beta pueden cambiar.

Transposition table

     En muchos juegos es posible llegar a la misma posición a partir de diferencias secuencias de movimientos.

En ajedrez, por ejemplo:

1. d4 Nf6 2. c4 g6

“transposiciones”.

tiene 4 posibles Se utiliza una hash table , por cada una de las posiciones analizadas a partir de una determinada profundidad.

Cada vez que llegamos a una nueva posición el programa comprueba en la tabla para ver si ya se ha analizado esa posición. (Key, tiempo constante). Si está, se recoge el valor anteriormente asignado a esa posición y el valor es usado directamente. Si no se encuentra, se calcula el valor con la función de evaluación y se inserta esa posición-valor en la tabla.

Se pueden evitar evaluaciones de subárboles completos .

Cuestiones Técnicas

    Existen numerosas mejoras a las técnicas descritas, que permiten crear máquinas que juegan a nivel competitivo Decisiones sobre la profundidad (>donde parar la busqueda?) Diseño de funciones de evaluación estática   Combinación lineal de características Pesos para ponderar la importancia de cada característica Aprendizaje automático   Aprendizaje de los pesos, tras una serie de partidas consigo misma Redes neuronales, algoritmos genéticos, etc.

Bibliografía

 Russell, S. y Norvig, P. “Inteligencia Artificial. Un enfoque moderno” (Prentice Hall, 1996).

 Cap. 5: Juegos".

 M.A.Cazorla, P. Campaña, F. Escolano y R. Rizo, “Fundamentos de Inteligencia Artificial” (Pub. Universidad Alicante, 1999).

 Cap. 5: Búsqueda en Juegos".

 F. Escolano, M.A.Cazorla, I. Alfonso, O. Colomina y M.A. Lozano, “Inteligencia Artificial. Modelos, Técnicas y Áreas de Aplicación” (Thomson, 2003).

 Cap. 2: Búsqueda Heurística (sección 2.3)".