Está en la página 1de 8

Introduccin Las primeras nociones e ideas sobre computadoras capaces de jugar ajedrez, curiosamente datan desde tiempo antes

de la invencin y existencia de estas mismas. Claude Shannon en 1950 public el primer artculo cientfico que inclua ideas y 'predicciones' sobre algoritmos o programas que podran determinar jugadas, a las que nombr de 'tipo A' y de 'tipo B'. Con los programas de tipo A hacia referencia a una bsqueda basada en 'fuerza bruta', este termino en el rea informtica consiste en el anlisis de todos los resultados o combinaciones posibles, por lo tanto, el algoritmos de tipo A examinara todas las posibles posiciones de cada rama del rbol de movimientos, usando el 'Algoritmo de Mimimax' (explicado ms adelante). El problema es que es imposible agotar todo el rbol por el tiempo que llevara analizarlo. Por otro lado y para evitar perder tiempo en examinar movimientos malos, Shannon sugiri los programas de tipo B, los cuales utilizaran un tipo de 'inteligencia artificial estratgica', con la cual solo se analizaran las mejores jugadas de capa posicin, tratando de asimilar al pensamiento humano en una partida. El problema de este motor de bsqueda es decidir qu movimientos son suficientemente buenos como para ser considerados. Los software que hoy en da estn en el mercado se basan en las teoras mencionadas, por lo que ellas fueron el punta pie inicial para la creacin de grandes y sofisticados programas, con algoritmos refinados que acompaados del buen hardware actual, ejecutan jugadas sumamente rpido y con capacidades tcticas impresionantes. Como funciona un software de ajedrez? Los programadores y desarrolladores de sistemas de ajedrez se basan en una serie de tcnicas para implementar sus algoritmos, a continuacin mencionare las principales: Representacin del tablero Existen diversas estructuras de datos estndares para representar cada pieza y cada posicin, esta es la clave del rendimiento en cuanto a movimientos y evaluaciones de posiciones. Bsicamente es una matriz de 8x8, 64 casillas donde a cada una de ellas se les asigna un valor numrico, de la siguiente forma: Casilla vaca: 0 Pen: 1 Caballo: 2 Alfil: 3 Torre: 4 Dama: 5 Rey 6 ***(Esto para las piezas blancas, para las negras se consideran los mismos nmeros pero negativos) En las siguiente imagen (figura 1) se observa claramente la disposicin de piezas base, esta grilla o matriz

numrica es la que utilizan muchos software bajo la interfaz visual que los usuarios observan. ********************incluir imagen grilla*********************+ tecnicas de busqueda Los movimientos en el juego, son considerados por la computadora como arboles de juegos (o en matemticas discretas considerado como grafo dirigido conexo), se supone que los algoritmos deberan llegar examinar todos los movimientos y contra-movimientos (del adversario) hasta llegar a una hoja final que es evaluada, no obstante y como he mencionado es imposible agotar el rbol completo por lo que se han implementado tcnicas de simplificacin y mtodos para aumentar la velocidad de las bsquedas y lograr ignorar movimientos triviales o considerado malos. Entre los principales puedo destacar: Algoritmo Minimax Por definicin, en teora de juegos Minimax es un mtodo de decisin para minimizar la prdida mxima esperada en juegos con adversario y con informacin perfecta, este algoritmo es recursivo, es decir evala nodo a nodo por cada nivel hasta llegar a las hojas y finalmente entrega un recuento basado en valores mnimos o mximos segn corresponda, en resumen es elegir el mejor movimiento para mi suponiendo que el contrincante escoger el peor o el mas daino tambin para mi. En la siguiente imagen (Figura 2) se muestra una representacin del rbol de juego Minimax. ****poner figura****

Poda alfa-beta Este mtodo es una extensin del algoritmo de Minimax, aplicada a juegos de dos contrincantes, es uno de los algoritmos mas utilizados dada su excepcional capacidad de aumentar la velocidad de bsqueda sin sufrir perdidas de informacin. Funcionamiento: Cada vez que el algoritmo evala un nodo u hoja, el algoritmo determina si los nuevos hijos generados

pueden generar una mejor utilidad de la que ya posee el nodo estudiado y si afecta al nodo padre. Si esta situacin no se produce seguir analizando es rama desperdiciara recursos como tiempo y espacio, por lo que no se sigue analizando se $poda$ (de all el nombre). Veamos una aplicacin: En la secuencia de variantes mostrada en la figura XXXX, utilizando el algoritmo alfa-beta slo 3 de los 4 nodos terminales necesitarn ser examinados. La bsqueda determina primero la puntuacin para la posicin $D$. Luego de asignar su valor (0 por defecto) ste es se pasa al nodo padre de esa posicin a su origen $B$. Este score establece un 'techo' para la evaluacin siguiente, la posicin $E$ con un score de +2 significa que para el adversario en la posicin $B$, es decir, el movimiento Txd5, es mejor que Axc3 ya que de ese nodo se deba obtener el mnimo y $0<2$ (ms adelante se explica como el programa determina que una torre es mas valiosa que un alfil). Al analizar la posicin $F$ un valor de -4 es asignado a ella, por lo cual no ser necesario analizar las siguientes posiciones terminales, ya que por regla del algoritmo conviene seguir por la rama de la posicin $B$ (ya que en ese nivel se debe escoger el mximo). Con esto se "ahorra" analizar otra rama luego de la posicin $C$. De esta forma el software determina que para la jugada de las piezas blanca en la posicin $A$ es mejor comer la reina con el alfil que tomar la torre enemiga con la torre de la posicin d5. incluir umagen poda Ab.png Funcin de evaluacin Cuando el juego comienza las piezas blancas escogen uno entre 20 movimientos posibles (16 opciones para los 8 peones mas 4 opciones para los 2 caballos), as mismo las negras tienen 20 opciones de respuesta sin importar la eleccin de las blancas, por lo que slo para la primera jugada por cada pieza se tienen 400 (20x20) posiciones o combinaciones diferentes. En la siguiente tabla se muestran las combinaciones aproximadas posibles solo para 4 jugadas por cada pieza: ******mostrar tabla****** Cuando el algoritmo obtiene el recuento o puntaje calculando por medio de una funcin de evaluacin para la posicin final de cada rama o posiciones terminales, mide cuan buena o mala es la posicin para el jugador de turno, un valor positivo si la computadora tiene ventaja o negativo si la tiene su oponente. Mientras mas sofisticada sea la funcin de evaluacin para poder dar una respuesta 'inteligente', mayor ser el costo de procesamiento, lo cual ha llevado a establecer ciertos criterios de evaluacin. Evaluacin de balance de material Es la funcin de evaluacin ms utilizada por su simpleza y aparente efectividad para dar valor a las jugadas, se basa en la importancia que tiene la ventaja numrica (Figura XXXXXX) en algunos casos sobre el adversario o en el peor caso el balance de fuerzas. En la siguiente tabla se muestra el peso o valor de cada pieza (esto es relativo, ya que cada software

puede determinar otros nmeros pero guardando siempre la proporcionalidad). ***Mostrar tabla de valores*** Ahora con este puntaje se puede calcular la funcin de evaluacin de desequilibrio material, cuya formula es la siguiente: Fed=(Nr*Rm + Nd*Dm + Nt*Tm + Na*Am + Nc*Cm + Np*Pm) (Nre*Rm + Nde*Dm + Nte*Tm + Nae*Am + Nce*Cm + Npe*Pm) con N(letra) igual nmero restante de piezas propias, y N(letra)e nmero restante de piezas enemigas. Evaluacin Tctica Respecto a la funcin anterior esta es mucho ms simple, los criterios que aplica se basan en penalizaciones para las jugadas que infrinjan o bonus en caso que logre un buen evento o jugada. **incluir tabla de bonus** La frmula para calcular esta funcin es: $Fet = nPAObs*-20 + nPEObs*20 nPR*2 $ Donde: nPAObs: Nmero de piezas amigas obstruidas . nPEObs: Nmero de piezas enemigas obstruidas . nPR: Nmero de peones retrasados con respecto a sus compaeros . Evaluacin de movimiento De las 3 funciones mostradas esta es la ms importante, permite definir las consecuencias de realizar un movimiento u otro. Algunas veces al realizar jugar una pieza x, a simple vista una 'buena jugada',pero sin haber considerado los movimientos futuros del adversario, muchas veces dos o tres jugadas posteriores esa 'buena jugada' se convierte en la sentencia del juego y recin ah es cuando uno se percata que la decisin tomada fue mala, ya que me produjo perdida material o inclusive la derrota. A diferencia de las dems funciones esta evala las consecuencias para cada nodo, antes de realizar algn movimiento, calificando cada pieza segn cual esta sea, por ejemplo, se sabe que las piezas como la reina torres o rey en lo ideal no se deben mover al comienzo en las aperturas, sino en la mitad o al final, ste es el mtodo que le brinda esa 'inteligencia' al software ya que sacar una reina o peor aun mover el rey hacia adelante al principio puede en unas cuantas jugadas del adversario traer consecuencias catastrficas. Junto a lo anterior esta funcin tambin puede medir la libertad de movimiento para cada pieza, esto es poder moverse sin ningn ataque de por medio, a continuacin adjunto la tabla de peso para cada pieza donde a mayor puntaje mayor preferencia de movimiento (notar que los peones lideran la preferencia): **incluir tabla** La frmula es la siguiente:

*incluir formula** Donde: Np: Nmero de piezas propias Nc: Nmero de casilleros alcanzables para atacar a piezas enemigas Ncl: Nmero de casilleros libres para la pieza i. TPmvij: Tipo de pieza de movimiento, (refirindose a los valores de la tabla 2), de la pieza i en el casillero j. V: valor en funcin de ataque o defensa. *******incluir arrbiba al comienzo de la seccion****** F = fed + fem + fet

Evaluacin de movimientos

Aplicacin (del pdf aplicacin del algoritmo poda alfa escritorio)

Conclusin Despus de todo el estudio realizado y como entendido en el rea informtica, me parece destacable la inteligencia artificial junto con la complejidad algortmica utilizada en la implementacin de un software ajedrecstico, la unin de stas dan nacimiento a cdigos y mtodos autnomos, capaces de decidir y determinar entre un sin fin de situaciones la mejor estrategia a seguir.

La forma y el refinamiento que han adquirido estos mtodos utilizados a los largo de los aos es admirable; pensar que todo comienza con una 'idea', un 'indicio' y ms aun, sin existir la tecnologa. Esas premisas aos mas tarde dan inicio a los juegos computacionales de ajedrez, logrando la implementacin por medio de arboles y recursividad, en este punto y a modo de comentario personal quiero comentar que, cuando curse estructura de datos, dentro de los contenidos estaba recursividad en algoritmos y en ese momento me pregunte, esto es complejo!, pero... ser til? en que o que tipo de software, en que situacin podra hacer uso de recursividad? Y ahora, dos aos ms tarde con este estudio respondo completamente mi pregunta, la recursividad es un pilar fundamental en el desarrollo de este tipo de aplicaciones, el anlisis que los algoritmos como el mtodo Minimax junto con la poda Alpha-Beta realiza en cada jugada es sorprendente, dada la cantidad de nodos y ramas que se extiende en cada jugada, se dice que existen ms nodos en un rbol y posiciones posibles de ajedrez que todas las estrellas de la Va Lctea, interesante no?. A pesar de que jams existir un algoritmo o software capas de analizar todas las jugadas, aun as, quin lidera el ttulo mundial de ajedrez es una mquina pensante, el sorprendente Rybka, a pesar de lo que se diga de el, de lo que de que hablar y el cmo lo hayan construido, simplemente lidera, a logrado sobrepasar la capacidad humana en este juego, destacando que la inteligencia artificial en cierta forma a logrado ir ms all de nuestras capacidades pensantes.

Caso Rybka Este software creado por Valsik Rajlich (Maestro internacional de ajedrez y experto en programacin de computadoras), es considerado el programa de ajedrez mas fuerte, obteniendo el Campeonato Mundial de Ajedrez por Computadoras cinco aos consecutivos, desde 2007 hasta el 2011. Este software entre el 2007 y el 2008 fue puesto a prueba con humanos, enfrentado a Grandes Maestros incluso uno de lite. Bajo ciertas venjas para los humanos Rybka gan la mayora de las partidas, empat una y perdi una contra Valdim Milov (con un Elo de 2705, numero 28 mundial en el 2011), eso s con condiciones muy ventajosas a favor de Milov. El revuelo que a causado en el mundo ajedrecstico por el llamado caso Rybka, donde el software fue descalificado por dopaje digital, ha dado mucho que hablar. La Asociacin Internacional de Juegos de Computadora (ICGA) ha resuelto por unanimidad descalificar a Rybka, el ordenador tetracampen por plagio a otros software (ya se mencionarn). Luego de una ardua investigacin, se logr demostrar que Vasik Rajlich inyecto cdigos de otros competidores digitales en su software para mejorar el rendimiento de su mquina, despus de que Rybka ganara algunos torneos los espectadores se percataron que el software haca jugadas similares a las de otros programas, por lo que decidieron abrir el caso y comenzar a estudiar al respecto. Para comprobar las teoras y acusaciones a Rybka la ICGA aplico ingeniera inversa al cdigo, la cual se define como obtener informacin o un diseo a partir de un producto accesible al pblico, con el fin de determinar de qu est hecho, qu lo hace funcionar y cmo fue fabricado. Con el estudio realizado lograron descubrir que Rybka inclua fragmentos fragmentos de programacin de otros dos software de cdigo libre Fruit y Crafty. De acuerdo a las reglas esta 'mala jugada' del creador de Rybka le ha salido costosa, dado que l como su equipo de produccin estn vetados de por vida de la competencias por computadora, adems se le pidi que devolviera el dinero ganado en los torneos as como los trofeos obtenidos. Por si fuera poco la asociacin borr sus nombres de la lista de ganadores, dando el reconocimiento a los subcampeones de dichos campeonatos. Hoy en da segn las estadsticas de motores de ajedrez realizadas por IPON (http://www.inwoba.de/), el software Houdini es el motor ms fuerte superando el Elo de Rybka.

Con base en todo el anlisis y el desarrollo realizado anteriormente nos damos cuenta del arduo trabajo que hay detrs del comienzo del desarrollo de alguna aplicacin, un trabajo laborioso, detallista y exacto, que debe cumplir las expectativas que los clientes tienen sobre lo que ser su sistema. Con esto nos hemos dado cuenta de la enorme diferencia que existe a la hora de desarrollar un software sin este previo anlisis, ya que la calidad el mismo baja considerablemente y muchas veces quedan pequeos detalles en la programacin que por no haber una buena captura de requerimientos previa, provoca tener que implementar y cambiar partes significativas de lo ya realizado, entorpeciendo el trabajo y los tiempos de planificaciones futuras. En fin los conocimientos adquiridos en el curso para el diseo de un software nos son de gran utilidad y nos llevan a ser un profesional ms completo y a la vez nos aporta lo necesario para desarrollar una aplicacin de donde corresponde, el diseo.

También podría gustarte