Ajedrez y Computadoras

Slides:



Advertisements
Presentaciones similares
INGENIERIA INFORMATICA Y BUSQUEDAS CON ADVERSARIOS
Advertisements

Instituto Tecnológico de Saltillo Inteligencia Artificial
Búsqueda en árboles de juego
ESTRUCTURAS DE CONTROL
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Complejidad Computacional
INTELIGENCIA ARTIFICIAL
Universidad San Martín de Porres
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Alumno: José Luis Segura Velázquez
“Programas para jugar ajedrez: ¿rivales o aliados
Círculos de proporción
Parte 3. Descripción del código de una función 1.
Programación Científica
Paricial IV Ing. Esmeralda Elizabeth Rodríguez Rodríguez
Cuanto Matón Luis Miguel Li Loo Jorge Luis Ocampo Mascaro
Repaso para la construcción del intérprete 2012
Guía n.2 presentado por : may katerine pinto barajas
Programación I Teoría III
Programación, Algoritmos y Estructuras de Datos
Seminario de Actualización - Excel Avanzado y Macros
Inteligencia Artificial
1.5 Algoritmos, Pseudocódigo y Diagramas de Flujo
Curso de Programación 1 Plan 97
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
CS1101X Programming Methodology
III. DISEÑO DE ALGORITMOS PARA LA SOLUCIÓN DE PROBLEMAS.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Inteligencia Artificial Búsqueda entre adversarios
MINIMO COMÚN MÚLTIPLO DE DOS NÚMEROS a y b
ESTRUCTURAS DE SECUENCIA
INTRODUCCIÓN A LA COMPUTACIÓN
BUSQUEDA EN JUEGOS DE ADVERSARIO Sección 1-4
Solución de problemas por búsqueda inteligente
Ingeniero Anyelo Quintero
27/07/14 Catedra de Programacion I 1 Programación I Operadores y Expresiones.
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
Casos de estudio Estudiaremos tres problemas
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación I Teoría VI: Recursividad
Trabajo de Título Desarrollo de la Maestría Ajedrecística Computacional Utilizando Recursos Restringidos Jorge Egger Mancilla 25 de Septiembre 2003.
Equipo # 1 Norma Pimentel Wendy Hernandez Julisa Javier Mario Tristán.
Inteligencia Artificial Resolver problemas mediante búsqueda
Ordenación, Clasificación
Arboles Binarios de expresiones
Tema 1: Técnicas heurísticas en juegos
1 Algoritmos Elementales de Grafos Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem
Prog. Univ. Rodríguez Rey, Pablo Funciones Programación I.
Archivos.
Agentes de resoluciones d problemas Parte I. Un agente puede adoptar una meta o un propósito para satisfacer.
Introducción al análisis de algoritmos
Diseño y análisis de algoritmos
CC3001 Algoritmos y Estructuras de Datos
UNIVERSIDAD SALAMANCA HISPABOT'03 (Alcalá de Henares)1 µrobot Diego A. Vicente,E. Espino, R. Aguilar, B. Curto, V. Moreno Dpto. Informática y Automática.
Programación en Lenguaje C
Análisis de algoritmos
Algoritmo Poda Alpha-Beta
Figure: Algoritmos Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
. Juegos.
Métodos de diseño de Algoritmos
Unidad 6: Árboles.
INTRODUCCIÓN A JUEGOS (BÚSQUEDA CON ADVERSARIOS)
AJEDREZ Carlos A. Alsina.
Conceptos Avanzados de Programación
Ing. Betty Suárez Torres
CURSO DE AJEDREZ “ Las piezas sobre la mesa “ CAPITULO III Ejercicio para el desarrollo del calculo mental abcdef gh Objetivo : Entrenar.
Fundamentos de Programación
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
Trabajo de Investigación del software Deep Blue
Transcripción de la presentación:

Ajedrez y Computadoras Andres Valverde 2011

Hitos históricos 1950 Teorías de Shannon 1956 Los Alamos Chess 1956 Invencion de Alpha-Beta 1957 Primeros programas completos 1967 Primera victoria sobre un humano en condiciones de torneo 1974 Primer Campeonato mundial de programas. Kaissa campeón 1981 Primera victoria frente a un maestro en partida de torneo. Cray Blitz 1988 Primera victoria frente a un GM (Larsen) por Deep Thought 1989 Kasparov vence a Deep Thought 1997 Deep Blue vence a Kasparov 2005 Fruit 1.0 es publicado con codigo abierto. 5 meses después Rybka es campeón del mundo y domina hasta hoy. Incremento de potencia de todos los motores. ELO>3000 2008 Ippolit (clon de Rybka) inaugura una serie de clones (Robbolito, Igorrit, ....y Houdini) 2011 Se revela que Rybka fué un clon de Fruit desde el inicio. Estado de shcok en el sistema.

Generador de movimientos Funcionamiento Motor de Ajedrez Generador de movimientos Datos Tablero Historia de movimientos (para cálculo de repeticiones) Derechos de enroque Regla de 50 movimientos Casilla "al paso" Otros datos no obligatorios Diversos sistemas de almacenamiento. Búsqueda  (Generación del árbol de posiciones) Evaluación  (Devuelve un valor aritmético para la posición dada, normalmente en centipeones)

Sistemas de datos y generadores de movimientos Matrices Mailbox 0x88 Bitboards

Mailbox -1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

Bitboards 0100001000000000000000000000000000000000000000000000000000000000 Fuente : Computer Chess programming wiki

PERFT. Posición inicial Arbol de posiciones Profundidad Posiciones Tiempo 1 20 2 400 3 8.902 4 197.281 0.2 secs 5 4.865.609 5 secs 6 119.060.324 120 secs 7 3.195.901.860 1 hora 8 84.998.978.956 27 horas PERFT. Posición inicial

Arbol de posiciones. Ejemplo de poda. Busqueda a 3 movimientos de profundidad

Poda del árbol de posiciones....... Algoritmo minimax mejorado : ALPHA-BETA (Por si sólo reduce el factor de ramificación de 35 a 6 si hay una buena ordenación de movimientos) Tabla de transposiciones ("Hash Table") Ordenación a priori de movimientos : SEE (Static Exchange Evaluation) Movimiento Nulo Poda de movimientos "malos" (LMR : "Late Move Pruning") Futility pruning, Lazy Eval .....

Algoritmo Alpha-Beta int AlphaBeta(int depth, int alpha, int beta) {     if (depth == 0)         return Evaluacion();  --> Hemos llegado al final, evaluar (*)      GenerarMovimientosLegales();     while (QuedanMovimientos()) {         HacerSiguienteMovimiento();         val = -AlphaBeta(depth - 1, -beta, -alpha);  -> Recursividad         DeshacerMovimiento();         if (val >= beta)             return beta;  --> El contrario tiene opciones mejores,                                no seguimos por aquí.         if (val > alpha)             alpha = val;  --> Mejor movimiento, almacenar si en raiz     }     return alpha;         --> No hemos encontrado una opción mejor                               para nosotros. Alpha no se modifica  }

... factor de ramificación reducido a 2 !! Se analizan una media de 2 movimientos por posición, de una media de 35 !! Permite alcanzar profundidades de 20 movimientos y más en un PC normal, frente a 6-7 como máximo si no se aplicaran las técnicas de poda. La fortaleza del programa se basa en reducir el árbol de posiciones despreciando el mínimo de buenos movimientos.

Funcion de Evaluación Material (100,325,325,500,975) Posición de las piezas (Tablas) Estructura de peones (doblados, retrasados, aislados..) Peones pasados Movilidad de las piezas Seguridad del Rey Otros

El motor como un conjunto Lo que hace a un motor destacar en fuerza: Ausencia de "bugs". Ejemplo clásico : Fruit 1.0 Rapidez en el algoritmo de generacion de movimientos y posiciones (40.000.000 pos/sec en una CPU a 2.4 Mhz). Cada vez que se dobla la velocidad, se consigue un incremento de entre 50 y 100 ELO. Integración y trabajo conjunto de búsqueda y evaluación. Optimimización para moderno hardware : 64 bits , multiproceso y clusters.

El programa más pequeño del mundo /**************************************************************************\ | Toledo Nanochess (c) Copyright 2009 Oscar Toledo G. All rights reserved  | | 1257 non-blank characters. Evolution from my winning IOCCC 2005 entry.   | | o Use D2D4 algebraic style for movements.  biyubi@gmail.com  Nov/20/2009 | | o On promotion add a number for final piece (3=N, 4=B, 5=R, 6=Q)         | | o Press Enter alone for computer to play.                                | | o Full legal chess moves.                     http://nanochess.110mb.com | | o Remove these comments to get 1326 bytes source code (*NIX end-of-line) | \**************************************************************************/ char*l="ustvrtsuqqqqqqqqyyyyyyyy}{|~z|{}" "   76Lsabcddcba .pknbrq  PKNBRQ ?A6J57IKJT576,+-48HLSU"; #define F getchar()&z #define v X(0,0,0,21, #define Z while( #define _ ;if( #define P return--G,y^=8, B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;X(w,c,h,e,S,s){int t,o,L,E,d,O=e,N=-M*M,K =78-h<<x,p,*g,n,*m,A,q,r,C,J,a=y?-x:x;y^=8;G++;d=w||s&&s>=h&&v 0,0)>M;do{_ o=I[ p=O]){q=o&z^y _ q<7){A=q--&2?8:4;C=o-9&z?q["& .$  "]:42;do{r=I[p+=C[l]-64]_!w|p ==w){g=q|p+a-S?0:I+S _!r&(q|A<3||g)||(r+1&z^y)>9&&q|A>2){_ m=!(r-2&7))P G[1]=O, K;J=n=o&z;E=I[p-a]&z;t=q|E-7?n:(n+=2,6^y);Z n<=t){L=r?l[r&7]*9-189-h-q:0 _ s)L +=(1-q?l[p/x+5]-l[O/x+5]+l[p%x+6]*-~!q-l[O%x+6]+o/16*8:!!m*9)+(q?0:!(I[p-1]^n)+ !(I[p+1]^n)+l[n&7]*9-386+!!g*99+(A<2))+!(E^y^9)_ s>h||1<s&s==h&&L>z|d){p[I]=n,O [I]=m?*g=*m,*m=0:g?*g=0:0;L-=X(s>h|d?0:p,L-N,h+1,G[1],J=q|A>1?0:p,s)_!(h||s-1|B -O|i-n|p-b|L<-M))P y^=8,u=J;J=q-1|A<7||m||!s|d|r|o<z||v 0,0)>M;O[I]=o;p[I]=r;m? *m=*g,*g=0:g?*g=9^y:0;}_ L>N){*G=O _ s>1){_ h&&c-L<0)P L _!h)i=n,B=O,b=p;}N=L;} n+=J||(g=I+p,m=p<O?g-3:g+2,*m<z|m[O-p]||I[p+=p-O]);}}}}Z!r&q>2||(p=O,q|A>2|o>z& !r&&++C*--A));}}}Z++O>98?O=20:e-O);P N+M*M&&N>-K+1924|d?N:0;}main(){Z++B<121)*G ++=B/x%x<2|B%x<2?7:B/x&4?0:*l++&31;Z B=19){Z B++<99)putchar(B%x?l[B[I]|16]:x)_ x-(B=F)){i=I[B+=(x-F)*x]&z;b=F;b+=(x-F)*x;Z x-(*G=F))i=*G^8^y;}else v u,5);v u, 1);}}

Interactuar con los motores Los motores carecen de interface gráfico. Son programas en modo consola, que aceptan datos y devuelven datos. Todo en aras de la velocidad. Para interactuar con ellos se utilizan interfaces gráficos, mediante protocolos Winboard o UCI. Los más conocidos : Winboard : El más antiguo y quizá el más rápido Arena : Muy potente y de fácil uso Scid  Wildcat Fritz Chesspartner Shredder Estos programas permiten jugar contra el motor, analizar posiciones o plantear matches y torneos entre motores.

Ajedrez gótico en Winboard

Ajedrez Chino en Xboard

Ranking de motores actuales Hay organizaciones que enfrentan a motores entre sí y publican los resultados. Las más conocidas : SSDF CCRL CEGT

CCRL Rating List (200 motores)

Torneos entre motores Existen docenas de torneos, realizados por particulares u organizaciones, en diversos formatos, controles de tiempo y categoría de participantes. Los más conocidos : WBEC  Chess War Open War Dirty Tour CCRL series WCCC CCT ......

Motores y humanos Giancarlo Pasciutto (Sjeng) and Stephan Meyer-Kahlen (Shredder) CPT2008 (Foto Richard Pijl)

Interacción motores-humanos Matches Motor-Humano : cada vez más con handicap de material u otros metodos de "debilidad forzada". En tiempos menores de 60 min/partida los motores son prácticamente imbatibles.  Juego por correspondencia : Los motores son admitidos como ayudantes en los análisis por la Federación Internacional (no en ciertas otras organizaciones) Aprendizaje y entrenamiento Análisis de aplazamientos Juego en Línea (ICC, playchess, FICS etc) Investigación en IA.

Hou Yifan campeona del mundo con 16 años Parece que el entrenamiento con software da sus frutos...

Futuro del software de ajedrez Multiprocesador y clustering Trabajo en equipo de programadores, autores de libro, asesores ajedrecistas, probadores.... Alquiler de tiempo de análisis en grandes centros de cálculo Sistemas de autotest y tuning automatizado Sistemas de almacenamiento para bases de datos de finales mayores de 7 piezas 

¿Es el ajedrez un tema resuelto?

Afortunadamente  ....... NO La tasa de victorias del blanco es aún mayor del 50% (54% en la mayoria de las grandes bases de datos. El porcentaje de tablas se mantiene constante por años. El aumento de potencia de los programas no para de crecer, pero aún no son perfectos. El ajedrez es simplemente DEMASIADO COMPLEJO para ser resuelto en medio plazo. Juegos más simples, como las damas, han sido resueltos. Otros son aún más complejos, como el GO.