INTELIGENCIA ARTIFICIAL

Anuncio
INTELIGENCIA ARTIFICIAL
TEORÍA DE JUEGOS
AJEDREZ
Enrique Sánchez
30 de Marzo de 2012
http://www.alfilchess.es
Índice
1. Ancedecentes
1.
Primeras ideas
•
•
•
2.
3.
Torres Quevedo
Shannon
Turing
Trabajos posteriores
Actualidad
•
Kasparov – DeepBlue
2. Representación del juego
(Bitboards)
3. Generación de
movimientos
4. La función de evaluación
5. Heurística
–
–
–
–
–
–
Minimax
Alpha – Beta
Ordenación
Killer moves
El efecto horizonte
El movimiento nulo
6. Otros avances
–
–
–
–
Aperturas
Tablas de transposición
(Zobrist)
Tablas de finales (Nalimov)
Uso eficiente del tiempo
Antecedentes
1. Primeras ideas
•
•
•
Torres Quevedo
Shannon
Turing
2. Trabajos posteriores
3. Actualidad
•
Kasparov – DeepBlue
El turco (1769 - 1839)
Charles Babbage
“The life of a Philosopher”:
Konrad
Suze
Describió un generador de
movimientos en su libro “Calculo
plano”, pero sin evaluación ni
“En la primera parte de mi
estudio, pronto llegué a la
conclusión de que cualquier
juego de inteligencia es
susceptible de ser practicado
por un autómata”
Estimó para el siglo XIX que
existiría ya un sistema de
búsqueda analítica para el
ajedrez
LEONARDO TORRES Y
QUEVEDO
 El ajedrecista hizo su debut
durante la Feria de París de 1914.
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.
Alan Turing
 En 1952 Turing escribió un programa de
ajedrez. TUROCHAMP. Primera partida,
Turochamp vs Machiavelli (Donald Michie).
 Trató de implementar TuroChamp en la
computadora Ferranti Mark 1 pero no lo
completo.
 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.
“Uno no puede programar una máquina para que
juegue mejor de lo que uno juega”
Claude Shannon
“Programing of a computer for Playing Chess”
Consideraciones de Shannon:

















Ventaja Material
Estructura de peones
Peones Aislados y retrasados.
Control relativo del centro.
Peones en color opuesto al alfil propio.
Peones pasados
Posición de las piezas.
Caballos avanzados, protegidos o atacados.
Torres en columnas abiertas o semiabiertas.
Torres en séptima fila.
Torres dobladas.
Posibilidades de ataque.
Piezas que protegen a otras piezas.
Ataques sobre otras piezas.
Ataques sobre casillas adyacentes al rey enemigo.
Clavadas.
Movilidad, medida por el número de movimientos legales
posibles.
El número de Shannon
120
10
Estimación de la
complejidad del
ajedrez: Número de
posiciones legales
entre 1043 y 1050
Número de átomos en
el universo: 4*1078 y
6*1079.
Determinó las búsquedas de Tipo A y Tipo B que veremos mas adelante:
Trabajos posteriores
El programa del laboratorio científico de los álamos
(Proyecto Manhattan), en una computadora MANIAC
El programa Berstein (IBM 704)
Programas soviéticos (Kurochkin)
El programa NSS (Newel, Shaw y Simon) (Universidad
Carnegie Mellon)
El programa Kotok (Instituto de tecnología de
Massachusset) y McCarthy (profesor del MIT) (1961)
Estrategia de búsqueda de tipo B. Perdió el match contra el
programa ITEP ruso, pero incentivo el estudio del ajedrez
por computadora.
La apuesta de Levy
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
Hacen su aparición CRAYBLITZ (Rober Hyatt) y
DEEPTHOUGHT.
En 1989 Levy perdió la apuesta 4-0 con DEEPTHOUGHT
Kasparov - DeepBlue
 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.
Kasparov - DeepBlue
Deep blue vs Kasparov
1996
1997
Un video y
seguimos
http://youtu.be/7XUKVj328z0
1. Antecedentes
2. Representación del juego
(Bitboards)
3. Generación de movimientos
4. La función de evaluación
Representación del juego (Bitboards)
La propuesta de Shannon: Cada casilla puede tomar 13 valores distintos.
Bitboards
Algunos de los bitboard que la mayoría de las computadoras utilizan son :
 64 mapas los cuales representan las casillas atacadas por cualquier pieza (si hay alguna) que ocupa una casilla en
particular.
 64 mapas que representan, inversamente al anterior, las casillas desde las cuales hay piezas atacando una casilla
en particular.
 2 mapas que representan las casillas atacadas por cada bando (blancas y negras).
 12 mapas cada uno de los cuales representa las casillas ocupadas por cada tipo de pieza de cada bando (por
ejemplo, Caballos blancos).
¿Bitboard?-> Velocidad
La forma básica de cómo generar movimientos con mapas de bits se describe a
continuación:
 Utilizar el mapa de bits para todas las piezas por color. Si encontramos que una
pieza de ese color está ubicada en la casilla correspondiente sus movimientos
deben ser generados. Si no, ir al siguiente bit.
 Determinar si la pieza en cuestión es un peón. Esto se realiza mediante la
operación lógica AND entre el bitmap de la posición actual y el de la ubicación
de los peones.
 Determinar las casillas a las cuales la pieza en cuestión puede mover legalmente.
Si es un peón el programa inicia la operación con el bitmap de destinos de
peones y casillas de captura, sino inicia con el bitmap de casillas atacadas desde
la casilla considerada. El bitmap para ubicaciones de piezas de igual color es
complementado o invertido con tal de entregar un mapa de las casillas no
ocupadas por piezas del mismo color. La intersección de este bitmap con el de
los destinos de peones o de ataque entrega el bitmap de casillas a las cuales la
pieza puede mover.
Bitboard
PAWN_ATTACKS= ((WP << 7) & ~RANK_A) & ((WP <<9) &
~RANK_H)
for (int i=0; i<56; i++)
{
if (board[i]= WHITE_PAWN)
{
if ((i+1) % 8 != 0)
pawnAttacks[i+9]= true;
if ((i+1) % 8 != 1)
pawnAttacks[i+7]= true;
}
}
Generación de movimientos
 Generación Selectiva : (Shannon) Examinar el tablero y obtener una serie de
movimientos "buenos" descartando el resto.
 Generación Incremental : Generar algunos movimientos, esperando que
alguno de ellos será lo suficientemente bueno o malo tal que la búsqueda a lo
largo de esa línea de juego pueda ser terminada antes de generar las otras.
 Generación Completa : Generar todos los posibles movimientos, esperando
que la tabla de transposición contendrá información suficientemente
relevante para hacer la búsqueda lo más eficiente posible.
 Hardware: DEEP THOUGHT
La función de evaluación
Las puntuaciones generalmente
asignadas a cada pieza son relativos al
valor del peón, con los valores:




Caballo 3 peones
Alfil 3 peones
Torre 5 peones
Dama 9 peones
El Rey en algunos programas no tiene
un valor asignado si bien en otros se
asigna un valor infinito con tal de
cambiar drásticamente la evaluación
material en caso de su captura. El valor
de un peón es un valor arbitrario que
generalmente va entre 50 y 100
puntos.
Evaluación posicional:
 Pieza sin defensa
Movilidad
 Estructura de Peones
 Puntuaciones asignadas a cada
pieza.
 Puntuaciones asignadas en el
final de partida
Un video y
seguimos
http://youtu.be/K0sdsJz5QeY
1.
2.
3.
4.
5.
Ancedecentes
Representación del juego (Bitboards)
Generación de movimientos
La función de evaluación
Heurística
•
•
•
•
•
•
Minimax
Alpha – Beta
Ordenación
Killer moves
El efecto horizonte
El movimiento nulo
Minimax
• 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í. Si
decimos que un jugador gana, el otro pierde y viceversa. Puede
existir un estado de empate.
– Etiquetamos a los jugadores con MAX y MIN. Por norma
siempre empezará a jugar MAX y vamos a querer que gane
dicho jugador.
Minimax
• 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.
Minimax
Minimax
• 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 maximizará esta función y MIN minimizará 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.
Minimax
Minimax
Minimax
Minimax
Minimax
• 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).
• El problema de decidir el movimiento adecuado.
• En su turno, la máquina debe decidir que movimiento hacer.
• Idea:
– En cada turno, construir el árbol de juego completo cuyo nodo raíz
sea la situación actual, desarrollándolo hasta los estados finales.
– 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.
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
Minimax
Minimax
Minimax
• 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.
Minimax
• 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: *máximovalor* y *mínimo-valor* almacenando,
respectivamente, cotas para el mayor y el menor
valor que puede tomar la función de evaluación
estática
Minimax
Minimax
Minimax
• Complejidad:
– Sea r es el factor de ramificación y m el nivel de profundidad.
– Complejidad en tiempo: O(rm).
– 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
PODA ALFA-BETA
Poda Alfa - Beta
Poda Alfa - Beta
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
• Esto determina en cada momento un intervalo
de posibles
valores que podría tomar el nodo
• Significado intuitivo de
en cada momento:
• Nodos MAX: es el valor actual del nodo (que tendría eso o más) y
es el valor actual del padre (que tendría eso o menos)
• Nodos MIN: es el valor actual del nodo (que tendría eso o menos)
y es el valor actual del padre (que tendría eso o más)
• La poda se produce si en algún momento
:
• Y no hace falta analizar los restantes sucesores del nodo
• En nodos MIN, se denomina poda y en los nodos MAX, poda
Poda Alfa - Beta
Poda Alfa - Beta
Poda Alfa - Beta
• Complejidad:
– Sea r es el factor de ramificación y m el nivel de
profundidad.
– Complejidad en tiempo: O(r3m/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(rm/2)
Poda 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
•
•
•
•
Ordenación
Killer moves
El efecto horizonte
El movimiento nulo
Ordenación
 La eficiencia en la búsqueda bajo Minimax depende del orden de los
movimientos en que se realiza esta operación.
 Desafortunadamente, ordenar los movimientos de la mejor forma
implica encontrar los mejores y buscar primero sobre estos, lo cual es
una tarea bastante difícil de lograr.
Capturas
Coronaciones
Jaques
Killer-moves
El resto
 Por ejemplo, el orden podría iniciarse con capturas, coronaciones de peón
(las cuales cambian dramáticamente el balance de material) o jaques (los
cuales a menudo permiten pocas respuestas legales), siguiendo con
movimientos que causaron recientes cortes en otras variantes a la misma
profundidad (denominadas jugadas-asesinas, killer-moves) y entonces
observar el resto de los movimientos.
Killer moves
• Varias estrategias existen para guardar los
movimientos asesinos. Lo más simple es
mantener una lista bastante corta de a lo más
dos movimientos de profundidad.
• Ejemplo:
La figura ilustra el funcionamiento de esta
heurística. Si es el turno de mover de las blancas
éstas intentarían el movimiento 1.Cxh6 debido a
que captura la torre. Luego de examinar las réplicas
del negro encontrará que este movimiento es
refutado por la respuesta 1... Ta1 mate. Entonces,
cuando el programa examine nuevos movimientos
para el blanco el primer movimiento negro que
tomará como respuesta sera 1... Ta1 debido a que
es un movimiento legal que genero un corte en una
variante anterior
El efecto horizonte
• Uno de los mayores dolores de cabeza de los
programadores de máquinas de ajedrez en
relación a la búsqueda es el llamado "efecto
horizonte", descrito en principio por Hans
Berliner.
• Numerosas técnicas se han desarrollado para
evitar el efecto horizonte: búsqueda de
"Posiciones Estables" y las "Extensiones
Singulares" desarrolladas en Deep Blue son
algunas de las más populares.
El efecto horizonte
Por ejemplo:
El efecto horizonte puede entenderse con este ejemplo: supongamos un hombre y una máquina que se
encuentran en la ventana de un rascacielos, digamos en el piso 46. Una persona, podría considerar el tirarse
por dicha ventana. Sus cálculos serían muy simples: al principio caería a la altura del piso 45. Eso no sería
grave. Pero a partir de ahí, dada la altura a la que se encuentra, y la presumible aceleración, el resultado
apunta a que sería muy doloroso.
El ordenador iría más lejos en sus cálculos. Consideraría la situación de caída, a la altura del piso 45. No le
parecería preocupante. Luego vería que se llegaría a la altura del piso 44. Y luego al 43. En principio,
calcularía la velocidad creciente de caída, pero no detectaría ningún peligro. El ordenador podría continuar
sus cálculos hasta llegar al piso 20, o al piso 10 y ahí detener sus cálculos. Su conclusión final sería: una
sensación muy fresca, del viento en la cara. Y saltaría.
El 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.
Ya acabamos…
1.
2.
3.
4.
5.
6.
Ancedecentes
Representación del juego (Bitboards)
Generación de movimientos
La función de evaluación
Heurística
Otros avances
•
•
•
•
Aperturas
Tablas de transposición (Zobrish)
Tablas de finales (Nalimov)
Uso eficiente del tiempo
Aperturas
• El ajedrez aleatorio de
Fischer es una variante
del ajedrez propuesta por Bobby Fischer en la
que la posición de salida de las piezas se
determina aleatoriamente, aunque con
ciertas restricciones. Fue anunciado el 19 de
junio de 1996, en el Pasaje Dardo Rocha de la
ciudad de La Plata, Argentina. También se lo
nombra por sus denominaciones en inglés:
Fischer Random Chess, Chess960,
Fischerandom chess, FR chess, o FRC.
Tablas de transposición
El método de ZOBRIST
Tablas de finales
 En 1977 Thompson se presentó en el Campeonato Mundial
de Computadoras de Toronto con una base de datos que
jugaba en forma perfecta el final de R+D v/s R+T
 Fueron la clave contra Kasparov
 Nalimov: Las tablas de Nalimov son ”casi” perfectas porque
toman en cuenta la captura en paso.
El tiempo de reflexión
• ¿Cuanto tiempo asignar al análisis de la
posición? Posiciones de fácil determinación
requieren un menor tiempo que aquellas
que son de difícil decisión o cálculo. Por
supuesto, decidir qué es una posición de
"fácil determinación" y una de "difícil
determinación" es un problema.
• Robert Hyatt describe como CRAY BLITZ
administra su tiempo en su documento
publicado en 1984.
¿QUÉ MAS PODEMOS
ESPERAR?
Descargar