Tuesday, November 6, 2012

Como genera una movida un motor de ajedrez?

El motor como ya hemos dicho es la parte "pensante" de un programa de ajedrez. Como ya hemos mencionado hay más de 300 motores disponibles, la mayoría de ellos son compatibles con el protocolo xboard y disponibles de forma gratuita en internet.
Puedes visitar la página de Leo Dijksman para tener información de los diferentes motores xboard http://wbec-ridderkerk.nl/index.html (inglés). En dicha página encontrarás no solamente información de muchos motores (incluido DanaSah) sino también el lugar donde descargarlos. En la página de Arena, http://www.playwitharena.com/ también puedes encontrar un apartado con los links donde descargar una gran cantidad de motores.
Y puedes visitar la página de Alex Schmidt si quieres tener información de los diferentes motores UCI http://www.uciengines.de/index.html (inglés). Verás que aunque dicha página es especialista en motores UCI, no se olvidadan de los motores xboard.
Vamos a ver ahora lo que hace un motor de ajedrez, un motor de ajedrez está construido principalmente de 3 partes:
  • El generador de movimientos.
  • La función de evaluación.
  • La función de búsqueda.
El generador de movimientos.
Si queremos que el programa juegue, el programa deberá ser capaz de generar una lista con todos los posibles movimientos candidatos a ser jugados, más adelante ya veremos como luego sabe cual es el mejor movimiento que tiene que jugar, pero de momento tenemos que tener claro que inicialmente el programa generará dicha lista.
 
El programa debe por supuesto ser capaz de realizar movimientos de enroque, al paso y promociones. Y por supuesto no debe hacer movimientos ilegales, por ejemplo quedarse en jaque tras realizar el movimiento, aunque por motivos de rapidez se puede a la hora de generar los movimientos incluir los ilegales y más tarde eliminarlos.
 
Para generar la lista, tenemos que pensar en el tablero y por ejemplo a acada casilla asociamos un valor entre 0 y 63, empezando desde A1 hasta H8. Para hacer mover un peón sumaremos 8 a la casilla inicial si el peon avanza una casilla o 16 si avanza dos casillas, si come en diagonal habrá que suma 7 ó 9, esto desde el punto de vista del color blanco, para el negro tendríamos que restar. Para el resto de piezas haríamos lo mismo. Tenemos que tener en cuenta las dimensiones del tablero y que las piezas al hacer movimientos no se pueden salir del tablero, para ello debemos imponer unas condiciones, para hacer más fácil este trabajo algunos han inventado a la hora de generar los movimientos unos tablero de tamaño 12x10, 12x12, 16x8, aunque luego los vuelven a convertir al normal de 8x8, si al hacer el movimiento la pieza sale fuera del tablero 8x8 normal es que el movimiento es ilegal.
La función de evaluación
Es la que nos permite valorar cada posición, a la hora de evaluar una posición como mínimo tenemos que controlar el material o piezas de cada bando, al igual que lo hace un humano, a cada pieza le podemos dar un valor, por ejemplo 1 para el peón, 3 para caballo y alfíl, 5 para la torre y 9 para la dama. La evaluación será la suma de las piezas de un jugador menos las del otro. Solamente con esto y si el programa juega a una profundidad elevada, el programa parecerá que está vivo y jugará, ganando a muchos humanos y algún que otro programa.
 
Pero a parte del material es importante que el programa, al igual que un buen jugador de ajedrez, examinen otra serie de cosas, algo que sabe un buen aficionado es que es interesante ocupar el centro con los peones y piezas como caballos y alfiles, desarrollar sus piezas lo antes posible, enrocar, tener la máxima movilidad posible y espacio, que el rey esté seguro tras su enroque, tratar de tener la pareja de alfiles, llevar las torres a las columnas abiertas o semiabiertas, cuidar las estructura de peones y tratar de conseguir peones pasados para promocionar, etc. Cuántas más cosas le enseñemos al programa, mejor jugará, pero tan importante como que el programa tenga una buena evaluación, es que la búsqueda a traves del árbol sea lo más efectiva posible y que el programa no se pierda en las infinitas combinaciones posibles. Hay quien hace que el programa evalue mucho haciendo su programa lento en las búsquedas y por tanto no muy efectivo ya que es posible que no llegué a un nivel adecuado de profundidad y se pierda una combinación, hay quien busca muy rápido evaluando la posición muy poco, con lo cual el programa será un monstruo táctico pero fallará en su juego posicional y sobre todo en los finales, hay que tratar pues de buscar un equilibrio.
La función de búsqueda
La función de búsqueda es por tanto la encargada de buscar el mejor movimiento a realizar, echará mano de las funciones de generación de movimientos, para generar todos los posibles movimientos legales para una determinada posición y también echará mano de la función de evaluación para evaluar cada una de esas posiciones.
La función de búsqueda actuará como un humano, pensará en un determinado movimiento a realizar y comprobará la respuesta del contricante, para esta respuesta el programa pensará ahora en la siguiente jugada y después en la contrarespuesta, etc. Esta forma de pensar tanto para el programa o como el jugador, en el mundo del ajedrez se le conoce como árbol de variantes.
 
 
Al comienzo de una partida de ajedrez, el jugador blanco tiene 20 posibilidades (es decir puede mover cada uno de sus 8 peones una casilla o dos, eso hace 16 posibilidades y puede mover sus dos caballos a otras dos casillas, eso hacen otras 4 y en total 20), a cada una de esas posibilidades el negro puede responder con otras 20 posibilidades y entonces el blanco a esa respuesta podrá responder con otra serie de posibilidades. El número de posibilidades en este caso depende de los movimientos que se vayan realizando, pero se estima que en el medio juego el número de movimientos posibles para una posición es de 35.
 
Si conseguimos hacer un programa que vaya examinando todas las posiciones del árbol, podríamos recorrer el árbol por el camino que condujera a la victoria, en programas como 3 ó 4 en raya, donde el número de posibilidades no es muy elevado, si el programa comienza, siempre ganará, en el ajedrez el número de combinaciones es muy elevado y es imposible saber en el movimiento inicial cual es el camino hacia la victoria, al menos de momento. Al igual que existen los finales perfectos de 5 piezas (incluso ya algunos de 6), se podrían generar los finales perfectos de 32 piezas, pero de momento es imposible no hay ordenador capaz de generar tal número de combinaciones posibles y almacenarlas en los discos duros actuales y el tiempo en realizarlas sería casi infinito, ¿algún día?
 
En programación a la función que nos permite buscar los movimientos por todo el árbol y examinarlos se llaman mínimax. Siempre considera el mejor movimiento, se trate de buscar para las blancas o negras. 
 
Un programa o un humano que solo piensen en la respuesta inmediata del contrario serán muy débiles, para jugar bien hay que pensar no solo en la respuesta inmediata sino que hay que ser capaces de ver como quedaría la posición unos movimientos más adelante. Un jugador que quiera ser considerado al menos como un buen aficionado deberá pensar al menos 3 movimientos suyos futuros, considerando los del contrario serían 6, a esto en el ajedrez se llama profundidad 6 (ply = 6).
 
Con un ply de 6 un ajedrecista tendrá un ELO (fuerza) de aproximadamente 1400 puntos. Si queremos hacer un programa con un ELO de al menos 2000 puntos la máquina deberá pensar al menos en ply =10 (se estima unos 150 puntos lo que se consiguen por cada ply extra, esto yo creo que se cumple para profundidades bajas, pero en profundidades altas posiblemente no, además hay que tener en cuenta las extensiones). Kasparov perdió su famoso encuentro contra Deep Blue, pero en una de las partidas que ganó a la máquina la máquina se sabe que había estado pensando en ply = 14 (hoy en día muchos programas alcanzan esa profundidad en tiempo de torneo), si echamos cuentas eso significa que la máquina estaría en una fuerza ELO 2600, lo cual creo que es bastante real, Kasparov tiene un ELO de unos 2800 puntos. Ya puestos se podría decir que Kasparov podría pensar más que en ply 15, pero Kasparov es humano y comete errores, la máquina no, la máquina siempre juega tal como se le ha enseñado.
 
Si hemos dicho que en cada posición hay unas 35 posibilidades, si queremos pensar en ply = 6, resulta que 35x35x35x35x35x35 = 1.838.265.625 combinaciones !!!!!!!!!!!!
Por supuesto ningún humano es capaz de analizar tal número de combinaciones, los humanos desechan la mayoría de posibilidades en una posición por intuición, para que vamos a comer con una dama un peón si está protegido, en principio pierdo la dama así que no voy a seguir investigando por ahí, aunque siempre hay que tener en cuenta la posibilidad de que haya sacrificios, podemos sacrificar la dama por ejemplo si un par de movimientos más tarde damos mate.
 
Un programa de ajedrez, ¿también desecha posibilidades o tiene que tener en cuenta todas las posibilidades y combinaciones?
 
Si nuestro programa mira todas las posibilidades y es capaz de analizar 50.000 posiciones por segundo necesitaríamos 1.838.265.625 / 50000 = 36765 sg, es decir aproximadamente 10 horas para llegar a ply = 6.
 
Afortunadamente el hardware cada día es más rápido y cualquier programa seguramente analizará más variantes. DanaSah es capaz de examinar 700.000 posiciones por segundo (la máquina Deep Blue examinaba más de 200.000.000 de posiciones por segundo, claro está con un hardware especial), Danasah llegaría pues a ply 5 (35x35x35x35x35=52521875) en poco más de un minuto, pero para llegar a ply=6 seguiría necesitando 3 cuartos de hora, así que DanaSah no puede examinar todas las posibilidades si quiere llegar a una profunidad elevada, debe pensar un poco como un humano.
 
Pero si DanaSah no examina todas las posibilidades, ¿eso significa que puede cometer errores al no considerar todas las posibiliades?
NO
 
Felizmente alguién se dió cuenta que no hace falta que un programa analice todas las posibilidades, al igual que los humanos desechan posibilidades, el programa poda el árbol de variantes si ve que no va a obtener una evaluación superior y lo hace de una forma matemática parecida a como lo haría un humano sin cometer errores, aproximadamente para una posición en la que hay 35 posibilidades la máquina con una función llamada alphabeta cuttof consigue quedarse con raiz cuadrada de 35 posibilidades a examinar, es decir que la máquina fundamentalmente se centrará en 6 posibilidades, lo cual hace que la máquina pueda jugar el doble de profundidad en el mismo tiempo. Así que teorícamente según lo dicho anteriormente DanaSah en poco más de un minuto podrá llegar al menos a profundidad (ply) 10.
 
¿Y como hacen los programas buenos como Shredder, Fritz, etc, para llegar a profundidad superiores a 16 en menos de 3 minutos?
 
Buena pregunta, para ello hay muchas técnicas que permiten a los programas accelerar al máximo la búsqueda y además estos programas emplean técnicas muy elaboradas para podar el árbol de variantes al máximo. Con todas estás tecnicas los programas punteros consiguen rebajar el número de movimientos a examinar normalmente de 6 a 3, aunque en este caso ya se corren riesgos de perderse algo.
 
Si quieres más detalles sobre como se acceleran las búsquedas visita el apartado programación de esta página web.
 
credito a la web:

Como hacer un programa de Ajedrez

PROGRAMACIÓN
¿Por donde empezar si quieres realizar un programa de ajedrez? Ya he comentado anteriormente que si quieres ver un programa sencillo, te puedes fijar en el código del programa firstchess, es el programa más sencillo que he visto.
Pero si antes de ver código, quieres tener una idea general de lo que debe hacer un programa de ajedrez, puedes visualizar el siguiente organigrama, pertenece a un programa de ajedrez compatible con el protocolo xboard. Pulsa sobre la imagen para verla ampliada o mejor descargatela y haz un par de zoom para verla bien con un programa por ejemplo como ACDSEE.
Función principal
La función principal es básicamente un bucle que espera recibir un comando xboard del interface o GUI, una vez recibido pasa el control a la función xboard(). Lo primero que tenemos que hacer en la función principal es incluir mediante #include la cabecera de los archivos necesitados para algunas funciones que vamos a utilizar de C, también incluimos el resto de archivos en los que hemos dividido el programa, esto último no es algo standard, yo lo he hecho así pero es más normal dividir el programa en varias fuentes y utilizar variables externas si procede.
Puedes ver dicha función principal aquí.
Función xboard
Función xboard(), sustituye a la función principal si recibimos el parámetro xboard,
gracias a estos comandos, podemos hacer jugar a DanaSah con interfaces de usuario como Winboard, Arena, Fritz, Chessmaster, etc.
Para comprender dicho protocolo debes examinar la siguiente página:
http://www.tim-mann.org/xboard/engine-intf.html
Puedes ver dicha función aquí.
Funciones de libro de aperturas
Si queremos que el programa juegue los primeros movimientos de libro, necesitamos unas funciones para que nos devuelvan un movimiento del libro si la variante que estamos jugando aparece en dicho libro. Yo simplemente compruebo que la variante está en el libro, miro a ver cuales son los posibles movimientos para jugar y selecciono uno al azar. Sería mucho mejor que el programa eligiera el movimiento según unas estadísticas, por ejemplo el número de partidas que se ganan con ese movimiento, si es jugada por jugadores fuertes, etc, pero por simplicidad yo lo he hecho así.
Puedes ver dichas funciones aquí.
Algunas de las técnicas utilizadas en la mayor parte de los programas de ajedrez son las siguientes:
Algoritmo alphabeta-cutoff con ordenadación (el corazón del programa)
Como ya sabemos la función alphabeta es la que nos va a permitir buscar cual es el mejor movimiento entre la lista de movimientos candidatos. A la función alphabeta la llamaremos de la siguiente forma:
puntos = Alphabeta (alpha, beta, profundidad)
donde alpha es el valor mínimo que podrá tener la evaluación, pueder ser el que nos den mate (-mate), beta será el valor máximo que podemos obtener, que nosotros demos el mate (+mate) y profundidad será el ply hasta el que queramos jugar (a no ser que se termine el tiempo). A la hora de realizar los movimientos comprobaremos primero los movimientos mejores, empezamos por el mejor.
ahora veamos como son los pasos a seguir:
  • Si no queda profundidad para buscar evaluaremos la posición con la función de evaluar.
  • Generaramos la lista de movimientos.
  • Ordenamos los movimientos de mejor a peor (primero las capturas buenas y promociones, luego las malas, luego el resto de movimientos).
  • Mientras haya movimientos a realizar probamos a realizar uno.
  • Ahora nuestra puntuación será, puntos = -alphabeta (-beta, -alpha, profundidad-1), nuestra puntuación es la del contrario con signo negativo, estarmos utilizando una función recursiva, es decir se llama asi misma.
  • Deshacemos el movimiento.
  • Si el valor obtenido es mayor que beta, no hace falta que sigamos buscando, esto es un cuttoff (cortamos el árbol de variantes), no vamos a obtener ningun valor mejor.
  • Si el valor obtenido es mayor que alpha, ajustamos el valor de alpha a ese valor, el movimiento que provoca ese resultado es digno de tener encuenta para nuestra variante principal.
  • Comprobamos si se produce mate o tablas por ahogado, repeticiones, etc.
Ahora el pseudocódigo,
int AlphaBeta(int alpha, int beta, int profundidad )
{
    if (profundidad == 0)
    return Evaluar();
    GenerataMovimientosLegales();
    OrdenaMovimientos();
    while (QuedanMovimientos()) {
    HacerProximoMovimiento();
    puntos = -AlphaBeta(-beta, -alpha, profundidad-1 );
    DeshacerMovimiento();
    if (puntos>= beta) // cutoff
    return beta;
    if (puntos> alpha)
    alpha = puntos;
    GuardamosMovimiento();
    }
return alpha;
}
Hay que decir que normalmente cuando no nos queda profundidad no se evalua directamente la posición si nuestro último movimiento es una captura, sino que se suele llamar a otra función Búsqueda de conocimiento (quiscent search), donde se comprueba si hay una posible recaptura, no podemos cortar de golpe ya que si no se nos produciría el llamado efecto horizonte, el programa jugaría mal en profundidades bajas dejándose material, esta función tiene el mismo esquema que el alphabeta pero solamente que tenemos que llamar a un generador de capturas que solo realice capturas y promociones, cuando no queden recapturas entonces evaluaremos la posición.
PVS (Principal Variation Search)
Una pequeña modificiación sobre el algoritmo alphabeta, consiste primero en estudiar la variante que tenemos de movimientos anteriores, normalmente la variante encontrada anteriormente es la buena, si seguimos con esta variante tenemos muchas posibilidades que el movimiento adecuado sea ese. Para seguir la variante principal podemos hacerlo de 2 formas, a la hora de ordenar los movimientos, colocamos ese el primero en la lista o la segunda forma es modificando el alphabeta un poco:
  • Mientras haya movimientos a realizar probamos a realizar uno.
  • Si seguimos la pvs, puntos = -alphabeta (-alpha-1, -alpha, profundidad-1)
  • Si no estamos siguiendo la pvs o resulta que puntos es mayor que alpha y menor que beta entonces hacemos una búsqueda normal, puntos = -alphabeta (-beta, -alpha, profundidad-1)
  • Deshacemos el movimiento.

int AlphaBeta(int depth, int alpha, int beta)
{
BOOL seguirPV = FALSO;
if (depth == 0)
return Evaluar();
GeneraMovimientosLegales();
OrdenaMovimientos();
while (QuedaMovimientost() {
HacerProximoMovimiento();
if (seguirPV == VERDADERO) {
puntos = -AlphaBeta(-alpha-1, -alpha, profundidad-1);
if ((puntos>alpha) && (puntos< beta)) // ¿Fallo?
puntos=-AlphaBeta(-beta,-alpha,profundidad-1);
} else
puntos=-AlphaBeta( -beta, -alpha, profundidad-1);
DeshacerMovimiento();
if (puntos>= beta)
return beta;
if (puntos> alpha) {
alpha = puntos;
seguirPV = VERDADERO;
GuardamosMovimiento();
}
return alpha;
}
Seguir la variante principal encontrada anteriormente hace que el algoritmo alphabeta tenga un redimiento de más del 100%, no se exactamente cuanto (¿quizás un 250%?), pero es algo obligatorio de hacer vamos.
Movimiento nulo
Otra posibilidad es cuando nos toca mover, pensar más en el movimiento que nos va a hacer el contrario que en el nuestro, de esta forma podemos ver más fácil las amenzas, a esto se llama técnica del movimiento nulo y consigue de uno a 3 ply más de profundidad.
Desgraciadamente el movimiento nulo no podemos utilizarlo en todos los momentos, no debemos utilizarlo si estamos siguiendo la variante principal (esto no ayudaría), pero tampoco lo debesmos utilizar por ser peligroso cuando estamos en jaque, si anteriormente ya hemos utilizado otro movimiento nulo, ni tampoco si hay poco material, yo lo utilizo cuando al menos en el tablero queda alguna torre.
El código correspondiente al movimiento nulo lo introducciremos en la función AlphaBeta justo antes de comenzar la Generación de movimientos.
if ((material >= VALOR_TORRE) && ( !EnJaque) && (profundidad>0) && ( !seguirPV) && ( !hahabidoNuloantes)) {
CambiarTurno();
puntos = -Alphabeta(-beta, -alpha, profundidad-1- R);
RecuperarTurno();
if (puntos>beta)
return beta;
}
R suele tener un valor normalmente de 2 ó 3, a mi me funciona mejor 2.
Es increíble este código, con apenas 10 líneas de código añadido podemos aumentar la velocidad de búsqueda en 2 ó 3 plys en el mismo tiempo.
Profundidad iterativa
Hace que si se acaba el tiempo tengamos un movimiento al menos decente de nivel anterior, además muy importante es que ayuda a ordenar los movimientos y nos sirve para visualizar la línea principal en cada nivel. En lugar de buscar entre todos los movimientos en un nivel de profundidad, el programa trata inicialmente de seguir una línea cercana a la anterior, si hay un cambio brusco de evaluación entonces examina entre todos los posibles valores, esto se hace indicando al programa un margen que se llama ventana de apiración, aspiration windows.
Extensiones
Normalmente tendríamos que intentar reducir por todos los medios el árbol de variantes, pero hay situaciones en las cuales nos puede servir el pensar más profundamente, unos casos que son habituales es cuando nos encontramos en jaque, cuando un peón está a punto de coronar o corona, cuando solo hay una respuesta posible al movimiento del contrario.
El código para estas extensiones lo incluiríamos dentro del alphabeta, empezaríamos después del movimiento nulo:
if (EnJaque )
profundidad++;
GenerarMovimientosLegales;
if (número_movimientos ==1)
profundidad++;
OrdenarMovimientos();
HacerProximoMovimiento();
if ((tipo_movimiento == Promocion) || (fila_ = 7))
profundidad++;
Antes de nada tengo que deciros que teneís una buena página de programación, la de Bruce Moreland, http://www.seanet.com/~brucemo/topics/topics.htm en la que aprendí muchas de las cosas que escribo aquí.
 
 
credito a:

CHESS INTERFACE / GUI

El interface o GUI más utilizado por la mayoría de jugadores profesionales y federados del ajedrez es el que proporciona la casa Chessbase, llamado en ocasiones Chessbase GUI. Su producto más fámoso, el programa Fritz (dicho programa se enfrentó también recientemente a Kasparov igualando su enfrentamiento) no solamente se encuentra en sitios especializados como revistas de ajedrez, sino que en ocasiones incluso lo podemos encontrar en grandes almacenes o incluso versiones antiguas en las librerías a precios muy económicos.
 
Chessbase se ha convertido en toda una multinacional y ha conseguido que el resto de programadores punteros, entre los que se encuentran los programadores de Shredder, Junior (tablas también en su enfrentamiento reciente con Krannik), Hiarcs, Minzo y Chess Tiger hagan sus motores con protocolo Chessbase.
Sin embargo el programa más vendido a nivel de aficionados es el Chessmaster. Muchos consideran a Chessmaster como un programa para aficionados, pero su motor de juego, The King, es de los mejores. Una pena que este programa no esté traducido al castellano porque su tutorial de ajedrez es magnifico.
 
Por otra parte los programadores de motores y organizadores de torneos, prefieren dos programas que no son comerciales, no por ello peores a los dos mencionados anteriormente, antes hemos hablado ya de Winboard, el primer programa compatible xboard, complicado de manejar es el preferido de los organizadores de torneos ya que es ahí donde los motores demuestran su compatibilidad con el protocolo xboard, además es muy robusto, Arena es un interfaz que particularmente creo que supera a winboard y hace un poco más automáticas las cosas para los motores, de todos los interfaces es el preferido mío para DanaSah, Arena no es tran extricto en el protocolo xboard como Winboard, el mismo GUI controla los movimientos legales, tablas, proporciona libros de aperturas, etc.
 
Si quieres conocer más acerca de los diferentes interfaces y como instalar DanaSah en dichos interfaces, puedes seguir leyendo, DanaSah juega entre otros en los siguientes interface o GUIs;

GUI Arena (Recomendado)
Arena es un programa que hace de interface (GUI) a motores que son compatibles con el protocolo Winboard y UCI tanto en su versiones 1 y 2 (la versión 2 suele ser una extensión de la versión 1 del protocolo). Arena es un programa que puedes descargar en su última versión, la 1.1, desde la siguiente página http://www.playwitharena.com/ (inglés)
Arena es mi interfaz preferido para hacer jugar a DanaSah, es gratuito, permite que los motores como el mío que no tienen libro de apertura jueguen con uno, tiene implementados unos muy buenos protocolos xboard y UCI permitiendo desarrollar al motor toda su velocidad, controla los movimientos legales, los casos de tablas, es facil de instalar los programas y los motores, tienes el interface en castellano, permite organizar torneos automáticos entre los diferentes motores, continuamente se está mejorando, vamos todo ventajas (la pena es que no se pueden instalar los motores con protocolo chessbase).
A parte de bajar el programa te recomiendo que te bajes un libro de aperturas para que el programa juegue con él (el libro mainbook de Harry en su versión 5 está bien) y un archivo para poner Arena en castellano.
La intalación del programa es bastante sencilla, simplemente sigue los pasos que te indica el programa, como cualquier otro programa. El programa se instala generalmente en la carpeta Arena dentro de Archivos de programas.
Para instalar DanaSah dentro de Arena, descomprime la carpeta zip que te has descargado con DanaSah e instala la carpeta danasahxxx entera dentro de la carpeta de motores (Engines).
En la carpeta Books introduce los libros que te hayas descargado. En la carpeta Flags puedes introducir el archivo euskadi.gif que es una banderita de Euskadi. En la carpeta Languages deberás colocar el archivo de idioma spanish descargado desde la página de Arena.
 
Para configurar el idioma debes ir a la barra de menús
--> Options --> Choise Languages..., ahí puedes cambiar el idioma si previamente has metido en la carpeta languages otros idiomas aparte del inglés y alemán.
Para configurar el libro deberás ir a la barra de menús
--> Libro -->Administrador..., y pulsar en el botón Abrir para buscar el libro colocado. Marca la opción utilizar transposiciones si quieres.
 
Para instalar el motor DanaSah, debes ir a la barra de menús
--> Motores -->Administrador... y pulsar sobre el botón Nuevo. De las 2 posibilidades que da UCI o Winboard, selecciona esta segunda y buscar el archivo danasahxxx.exe, este archivo estará situado dentro de la carpeta danasahxx que habíamos colocado dentro de la carpeta de engines, si un poco rollo pero no muy complicado, en cuánto instales un par de motores todo es igual. Automaticamente te saldrá el nombre del autor y el país, escribe la palabra Euskadi si quieres que el motor juegue con la banderita de Euskadi. Asocia archivo logo con el archivo danasahxxx.jpg. Por último pasaremos de la pestaña General a Libros y marcaremos Usar el libro principal de Arena con este motor. A partir de la versión 1.3, Danasah incluye sus propios libros, son muy completos y no hace falta que indiques por tanto otro libro.
 
Una de las pocas pegas que encuentro en este interfaz, es que aquí los motores como danasah, aunque estén instalados las tablas de finales de 5 o menos piezas, no las utilizará, creo que se debe a un problema de que el interfaz no puede acceder a dichos finales por un problema de copyright de código y que no ha pagado por ello, si un motor quiere acceder a dichas tablas tiene que tener su propio código.
GUI Winboard
Winboard es un interface que es compatible con el protocolo xboard en sus versiones 1 y 2. El primer interface en soportar el protocolo xboard.
Te puedes descargar la última versión de Winboard, la versión 4.2.7 desde la página de Tim Mann (el creador del protocolo xboard) http://www.tim-mann.org/xboard.html (inglés, en ella también se encuentra las especificaciones que debe cumplir el protocolo xboard). El proyecto xboard ha estado un poco parado, recientemente parece que de nuevo se ha activado, entre otros gracias a Alessandro Scotti, parece que los organizadores están utilizando su versión.
 
Winboard es bastante más complicado de utilizar que Arena, sobre todo en cuánto a la instalación de un motor dentro de su interface, yo mismo sufro para configurar mi motor bajo dicho GUI. Winboard no dispone de libro de aperturas para el motor (se puede intentar resolver con un motor llamado Thinker), Winboard es muy exigente con los motores, éstos deben tener un buen protocolo xboard o de lo contrario darán problemas en su funcionamiento, incluso el programa TSCP presenta algunos errores en su protocolo, no controla por ejemplo la legalidad de los movimientos, Winboard no controla los aspectos del juego y deja que el motor haga el trabajo. Winboard no reconoce el protocolo UCI, aunque mediante un adaptador como Polyglot por Fabien Letouzey se puedan utilizar dichos motores.
 
Pero a pesar de todo Winboard es el programa favorito para muchos de los orgranizadores de torneos, como por ejemplo Leo Dijksman, así que también he probado a hacer que Danasah juegue bajo winboard, para ello debes instalar al menos la versión 1.1 de DanaSah, puedes ver la página de Leo en la dirección: http://wbec-ridderkerk.nl/index.html
La instalación del programa Winboard es sencilla, solamente sigue sus instruciones.
El programa se instala en la carpeta Winboard dentro de la carpeta Archivos de programa. Y crea una entrada en el menú de Inicio. Junto con la interfaz gráfica se instala el motor Gnuchess, creo que en su variante antigua y en sus versiones 4 y 5.
Para configurar DanaSah u otro motor de una forma rápida y sencilla te recomiendo que hagas lo siguientes:
Descomprime la carpeta zip que te has descargado con DanaSah y copia el archivo danasahxxx.exe, danasah.ini y los libros de apertura opn a la misma carpeta donde está situado Winboard.
Modifica el archivo winboard.ini y cambia la siguiente línea, donde pone:
/firstChessProgramNames={GNUChess
"GNUChes5 xboard"
sutituyelo por:
/firstChessProgramNames={Danasahxxx
"danasahxxx.exe xboard"
y por último simplemente inicia el archivo winboard.exe, aparecerá un menú para comenzar el programa.
GUI Chessbase-Fritz (Recomendado)
El interface de Chessbase es compatible como ya lo hemos venido diciendo con los motores propios comercializados por Chessbase. A parte de eso el interface también es compatible con el protocolo UCI en sus últimas versiones. También había un adaptador para motores xboard, pero dicho adaptador hacía a los motores más débiles. ¿Por que ocurrió esto? ¿Fallo de programación? ¿o lo hicieron adrede para que los motores xboard no presentaran batalla a los motores chessbase?
Puedes encontrar más información sobre Chessbase en la página http://www.chessbase.com/ (castellano).
El interfaz de Chessbase lo utilizan la mayoría de jugadores profesionales, federados y aficcionados, así que es interesante que DanaSah pueda jugar bajo ese interface. La última versión tiene un bonito tablero 3D.
Sin embargo hemos comentado anteriormente que DanaSah es compatible con el protocolo winboard 2, ¿entonces como hacerlo funcionar como un motor UCI?, para ello hay una aplicación de Odd Gunnar Malin, la puedes encontar en la página: http://home.online.no/~malin/sjakk/Wb2Uci/ (no hace falta que la descargues para jugar con DanaSah, ya que DanaSah lleva incorporada dicha herramienta)
Importante, para que puedas instalar Danasah u otro motor en Fritz como motor UCI, el GUI tiene que estar actualizado, debes disponer al menos de la versión 7 del programa y si no lo está convenientemente, actualiza la GUI.
El programa Fritz o uno de la casa chessbase se suelen instalar en la carpeta Chessbase dentro de Archivos de programa, dentro de la carpeta Chessbase encontrarás una carpeta que se llama Engines y debe haber al lado o dentro de ésta una carpeta que se llama Engines.UCI, copia en dicha carpeta la carpeta que yo proporciono en la descarga.
 
Ahora en el programa debes ir a la barra de menús,
--> Crear módulo uci... y cuando se abre la ventana examinas y buscas el archivo danasahxxxuci.exe (este es la utilidad wb2uci.exe de Odd a la que he cambiado de nombre, es importante no debes abrir danasahxx.exe sino danasahxxxuci.exe).
Por último vas de nuevo al menú,
--> Módulo -->s Cambiar módulo principal y seleccionas ya Danasahxxx..
Un último apunte, si quieres editar una posición con DanaSah, cuando vas a cambiar el módulo principal en los parámetros del módulo debes editar una entrada que pone Edit y cambiar setboard por cb-edit (no importante para jugar).
Chessbase además de proporcionar un libro de aperturas a los motores, permite también que los motores jueguen con las famosas tablas de finales de 5 piezas o menos de Nalimov, es decir el programa juega perfecto si en el tablero quedan menos o igual de 5 piezas (para ello las tablas de finales tienen que estar instaladas en el ordenador y convenientemente configuradas, no suele venir por defecto con Fritz), esto es una ventaja frente al interface de Arena, para que en Arena el motor juegue con los finales tiene que estar preparado, aquí se encarga el GUI de hacerlo. ¡¡¡Que emoción ver al motor dar mate con alfil y caballo!!!
GUI Chessmaster
Chessmaster además de permitir jugar con su motor de juego, the King (con todas sus diferentes personalidades que ha incorporado el autor), es también compatible con los motores con protocolo xboard. Por tanto podremos instalar DanaSah como una personalidad más.
Puedes encontrar más información sobre Chessmaster en la página: http://chessmaster10.ubi.com/uk/ (inglés).
Chessmaster tiene un tablero en 3 dimensiones bonito y un curso de ajedrez espectacular, lastima no haya una traducción en castellano.
Para configuar DanaSah como un motor para Chessmaster vete al menú,
--> Game --> Import Winboard Engine, en nombre puedes poner DanaSah, marca la opción para que use libro de aperturas, con browse selecciona el archivo danasahxxx.exe (que previamente habrás descomprimido y colocado en algún sitio, donde quieras) y si quieres marca la opción para que el programa juegue los finales perfectos con la base de datos de finales de Chessmaster (tablas parecidas a las de Nalimov). Si quieres en rating pon un valor aproximadamente de 2150. Ahora ya puedes comenzar una nueva partida y seleccionar como computer a DanaSah.

Modo consola
El modo consola significa que vamos a ejecutar el programa y que va a tener un aspecto de programa de sistema operativo MS-DOS, es el interfaz propio del motor, no dispondrás de ratón para la introducción de jugadas y tendrás que dar gracias a Dios que puedas ver un tablero no gráfico con las piezas.
Este modo está disponible con DanaSah hasta la versión 1.1, a partir de la próxima versión lo eliminaré probablemente, ya que este modo no se utiliza. ¿Para que utilizarlo disponiendo de programas gratuitos como Winboard y Arena? Además aunque DanaSah tiene un sistema de consola, en dicho sistema por sencillez solo se permite jugar en una determinada profundidad de juego fija y no lo he preparado para jugar por tiempo.
Para ejecutar DanaSah en modo consola, simplemente descompime el archivo zip descargado en una carpeta y ejecuta el programa danasah11.exe, puedes teclear el comando ayuda para obtener una lista de las opciones disponibles.

Monday, November 5, 2012

Kirlian photography

Kirlian photography



From Wikipedia, the free encyclopedia


    


Kirlian photograph of two coins
 
Kirlian photography is a collection of photographic techniques used to capture the phenomenon of electrical coronal discharges. It is named after Semyon Kirlian, who, in 1939 accidentally discovered that if an object on a photographic plate is connected to a high-voltage source, an image is produced on the photographic plate.[1] The technique has been variously known as "electrography",[2] "electrophotography",[3] "corona discharge photography" (CDP),[4] "bioelectrography",[2] "gas discharge visualization (GDV)",[5] "eletrophotonic imaging (EPI)",[6] and, in Russian literature, "Kirlianography".

Kirlian photography has been the subject of mainstream scientific research, parapsychology research and art. To a large extent, It has been co-opted by promoters of pseudoscience and paranormal health claims in books, magazines, workshops, and web sites.[7][8]

History
In 1889, Czech B. Navratil coined the word "electrography". Seven years later in 1896, a French experimenter, H. Baravuc, created electrographs of hands and leaves.
In 1898, Russian engineer Yakov Narkevich-Iodko[9][note 1] demonstrated electrography at the fifth exhibition of the Russian Technical Society.

In 1939, two Czechs, S. Pratt and J. Schlemmer published photographs showing a glow around leaves. The same year, Russian electrical engineer Semyon Kirlian and his wife Valentina developed Kirlian photography after observing a patient in Krasnodar hospital who was receiving medical treatment from a high-frequency electrical generator. They had noticed that when the electrodes were brought near the patient's skin, there was a glow similar to that of a neon discharge tube.[10]

The Kirlians conducted experiments in which photographic film was placed on top of a conducting plate, and another conductor was attached to the a hand, a leaf or other plant material. The conductors were energized by a high frequency high voltage power source, producing photographic images typically showing a silhouette of the object surrounded by an aura of light.

In 1958, the Kirlians reported the results of their experiments for the first time. Their work was virtually unknown until 1970, when two Americans, Lynn Schroeder and Sheila Ostrander published a book, Psychic Discoveries Behind the Iron Curtain. Although little interest was generated among western scientists, Russians held a conference on the subject in 1972, at Kazakh State University.[11]

Kirlian photography was used extensively in the former Eastern Bloc. For example, in the 1970s, Romania had 14,000 state-sponsored scientists working on the technique.[12] The corona discharge glow at the surface of an object subjected to a high voltage electrical field is referred to as a Kirlian aura in Russia and Eastern Europe,[13][14] however this should not to be confused with the paranormal concept of the aura. In 1975 Belarusian scientist Victor Adamenko wrote a dissertation titled Research of the structure of High-frequency electric discharge (Kirlain effect) images.[15][16][17][18]

Early in the 1970s, Thelma Moss and Kendall Johnson at the Center for Health Sciences at the UCLA conducted extensive research[11] into Kirlian photography. Moss led an independent and unsupported parapsychology laboratory[19] that was shut down by the university in 1979.[20]

Kirlian's research first became known in the United States after Shelia Ostrander's and Lynn Schroeder's book "Psychic Discoveries Behind the Iron Curtain" was published in 1970. High voltage electrophotography soon became known to the general public as Kirlian Photography.

Overview
Typical Kirlian photography setup (cross section)
Typical Kirlian photography setup (cross section)

Kirlian photo of a fingertip

Kirlian photo of two coins

Kirlian photo of a Coleus leaf
Kirlian photography is a technique for creating contact print photographs using high voltage. The process entails placing sheet photographic film on top of a metal discharge plate. The object to be photographed is then placed directly on top of the film. High voltage is momentarily applied to the metal plate, thus creating an exposure. The corona discharge between the object and the high voltage plate is captured by the film. The developed film results in a Kirlian photograph of the object.
Color photographic film is calibrated to faithfully produce colors when exposed to normal light. Corona discharges can interact with minute variations in the different layers of dye used in the film, resulting in a wide variety of colors depending on the local intensity of the discharge.[21] Film and digital imaging techniques also record light produced by photons emitted during corona discharge (see Mechanism of corona discharge).
Photographs of inanimate objects such as a coins, keys and leaves can be made more effectively by grounding the object to the earth, a cold water pipe or to the opposite (polarity) side of the high voltage source. Grounding the object creates a stronger corona discharge.[22]
Kirlian photography does not require the use of a camera or a lens because it is a contact print process. It is possible to use a transparent electrode in place of the high voltage discharge plate, allowing one to capture the resulting corona discharge with a standard camera or a video camera.[23]
Visual artists such as Robert Buelteman,[24] Ted Hiebert,[25] and Dick Lane[26] have used Kirlian photography to produce artistic images of a variety of subjects. Kirlian Photographer Mark D. Roberts, who has worked with Kirlian imagery for over 40 years, published a portfolio of plant images entitled "Vita occulta plantarum" or "The Secret Life of Plants", first exhibited in 2012 at the Bakken Museum in Minneapolis.

[edit] Research

Kirlian photography has been a subject of scientific research, parapsychology research and pseudoscientific claims.[7][8] There are no clear delineations between classic scientific research, fringe research, and claims made by promoters of alternative medicine and the like. Much of the research conducted around the middle of the 20th century occurred in the former Eastern Bloc before the cold war ended and has not held up to the scrutiny of stricter Western scientific standards.

[edit] Scientific research

Results of scientific experiments published in 1976 involving Kirlian photography of living tissue (human finger tips) showed that most of the variations in corona discharge streamer length, density, curvature and color can be accounted for by the moisture content on the surface of and within the living tissue.[27] Scientists outside of the US have also conducted scientific research.

[edit] Anton Antonov

Bulgarian scientist Anton Antonov conducted experiments which show that the conductivity of an object does not influence the resulting images, but that corona discharge formation depends on the distribution of dielectric permittivity. In 1979, Antonov's Kirlian photography experiments generated data about the distribution of the electric field in the air gap between an object and the registering medium during corona discharge. These discharges were found to be formed by both negative nitrogen ions and positive oxygen ions.[28][29][30][31]
In 1968, Antonov photographed water droplets using black and white Kirlian photography.[32] Similar research was carried out by Ignat Ignatov almost 40 years later.

[edit] Ignat Ignatov

Ignat Ignatov conducted Kirlian photography research using color film to examine the colors of corona discharges. His experiments showed a correspondence between electron energy levels and the colors recorded on the film. He demonstrated that red corresponds to an energy level of 1.82 electron volts (еV); orange, 2.05 eV; yellow, 2.14 eV; blue-green (cyan), 2.43 eV; blue, 2.64 eV; and violet, 3.03 eV. Green discharge emissions were not observed in these experiments. Ignatov found that image quality on film was much higher than when corona discharges were recorded with digital imaging techniques.[33][34][35][36]

In 2010, Ignatov used color Kirlian photography to study droplets of different types of water.[37] He found that his results depend on the dielectric permittivity of water, which is related to the composition and spectral analysis of water. Kirlian photography is used as an auxiliary method for Bulgarian scientists in research the properties of water. The primary method used is spectral analysis in the infrared spectrum.[38][39][40]

[edit] Konstantin Korotkov

Konstantin Korotkov developed a technique similar to Kirlian photography called Gas Discharge Visualization (GDV).[41][42][43] Korotkov's GDV camera system consists of hardware and software to directly record, process and interpret GDV images with a computer. Although diagnostic medicine experiments conducted by Korotkov using GDV were deemed to be statistically unreliable, his web site still promotes his device and research in a medical context.[44][45]

[edit] Other scientific research

Izabela Ciesielska at the Institute of Architecture of Textiles in Poland experimented with corona discharge photography (CDP) to evaluate the effects of human contact with various textiles on biological factors such as heart rate and blood pressure, as well as corona discharge images. The experiments used the The GDV camera designed by Konstantin Korotkov to capture corona discharge images of subjects fingertips while the subjects wore sleeves of various natural and synthetic materials on their forearms. The results failed to establish a relationship between human contact with the textiles and the corona discharge images, and were considered inconclusive.[9]
Galina Gudakova conducted biological research in Russia.[46][47] She explored the growth of microbiological cultures using Kirlian photograph.

[edit] Parapsychology research

Around the 1970s, interest in paranormal research peaked. In 1968, Dr. Thelma Moss, a psychology professor headed UCLA’s Neuropsychiatric Institute (NPI ), which was later renamed the Semel Institute. The NPI had a laboratory dedicated to parapsychology research and staffed mostly with volunteers. The lab was unfunded, unsanctioned and eventually shut down by the university. Toward the end of her tenure at UCLA, Moss became interested in Kirlian photography, a technique that supposedly measured the “auras” of a living being. According to Kerry Gaynor, one of her former research assistants, "many felt Kirlian photography’s effects were just a natural occurrence."[20]

[edit] Pseudoscientific claims

Kirlian believed that images created by Kirlian photography might depict a conjectural energy field, or aura, thought, by some, to surround living things. Kirlian and his wife were convinced that their images showed a life force or energy field that reflected the physical and emotional states of their living subjects. They thought these images could be used to diagnose illnesses. In 1961, they published their first paper on the subject in the Russian Journal of Scientific and Applied Photography.[48] Kirlian's claims were embraced by energy treatments practitioners.[49]

[edit] Torn leaf experiment

A typical demonstration used as evidence for the existence of these energy fields involved taking Kirlian photographs of a picked leaf at set intervals. The gradual withering of the leaf was thought to correspond with a decline in the strength of the aura. In some experiments, if a section of a leaf was torn away after the first photograph, a faint image of the missing section would sometimes remain when a second photograph was taken. If the imaging surface is cleaned of contaminants and residual moisture before the second image is taken, then no image of the missing section would appear.[50]

The living aura theory is at least partially repudiated by demonstrating that leaf moisture content has a pronounced effect on the electric discharge coronas; more moisture creates larger, more dynamic corona discharges. As the leaf dehydrates, the coronas will naturally decrease in variability and intensity. As a result, the changing water content of the leaf can affect the so-called Kirlian aura. Kirlian's experiments did not provide evidence for an energy field other than the electric fields produced by chemical processes, and the streaming process of coronal discharges.[4]

The coronal discharges identified as Kirlian auras are the result of stochastic electric ionization processes, and are greatly affected by many factors, including the voltage and frequency of the stimulus, the pressure with which a person or object touches the imaging surface, the local humidity around the object being imaged, how well grounded the person or object is, and other local factors affecting the conductivity of the person or object being imaged. Oils, sweat, bacteria, and other ionizing contaminants found on living tissues can also affect the resulting images.[51][52][53]

[edit] Qi

Scientists such as Beverly Rubik have explored the idea of a human biofield using Kirlian photography research, attempting to explain the Chinese discipline of Qigong. Qigong teaches that there is a vitalistic energy called qi (or chi) that permeates all living things. The existence of qi has been mostly rejected by the scientific community. Rubik's experiments relied on Konstantin Korotkov's GDV device to produce images which were thought to visualize these qi biofields in chronically ill patients. Rubik acknowledges that the small sample size in her experiments "was too small to permit a meaningful statistical analysis."[54] Vitalistic energies, such as qi, if they exist, would exist beyond the natural world. Claims that these energies can be captured by special photographic equipment are criticized by skeptics.[49]

http://en.wikipedia.org/wiki/Kirlian_photography

Sunday, November 4, 2012

WinBoard a classic 2D chess game

A classic 2D chess game with support for online games

 

Improving with a Chess Engine

Computers have had a profound influence on chess. Chess engines like Fritz and Rybka have become stronger players than even the best humans, while other computer programs have made chess training and learning easier than ever.
 
 

These days, it’s easy to get a world-class chess player in your home in the form of an extremely strong chess engine. Whether you opt for a commercial program like Fritz or Rybka, or choose one of dozens of free programs, you can have a “player” who is as strong (or stronger!) on your computer any time you need a little advice on your game. However, many players have trouble figuring out the best way to use a chess engine to improve their play. Here are a few different ways in which a chess engine can help you take your game to the next level!

Analyzing GamesOkay, this one is obvious. Still, in case you’ve only been using your engine to play games, I think it’s important to point out that chess engines are a great tool for helping you analyze your games after you’ve played. Simply input your games into your engine of choice, use the analysis functions available to you (two common functions to look for are “infinite analysis,” which will allow you to analyze as you input the moves, and “full analysis,” which will annotate the entire game), and presto: you’ve got instant insights into the quality of every move played in that game!Note, however, that I said engines are great for helping with analysis, not doing all of the work for you. An engine can’t tell you why a move was a blunder, or why another alternative was winning. Sure, for tactical errors, the reasoning behind a refutation or shot is usually immediately obvious. But for more subtle errors, it can often take a strong human player to help guide you through the process of figuring out why one move was better than another. 

 

A Playing Partner

There’s no substitute for practice playing against real, human players when it comes to improving through actually playing chess games. That said, there’s something to be said for playing against the strongest competition possible. Playing against a computer that only rarely makes the most subtle of mistakes can force you to play accurately to win, which can translate to more accurate play in real games. 

One problem with playing against computers, though, is that (for most of us) we have no hope when playing against a computer at full strength. The obvious solution of forcing the computer to play on a lower difficulty level has the drawback that it means we don’t get the full benefits of playing against a very strong opponent. There are at least two ways to work around this problem and give yourself a fair challenge while still allowing the computer to play at its best. First, you can play the computer with material odds in your favor. By giving yourself an advantage at the beginning of the game, you can offset your computer’s strength without forcing the engine to play weakly. Instead, you’ll start with an advantage that you can try your best to hold onto until the end of the game. Even better, you can track your improvement by slowly lowering the odds; there’s no feeling like knowing you can now beat your computer too convincingly with rook odds, and it’s time to move down to taking knight and move instead! The other way to improve by playing a computer is by beginning play in a “won” position – say, a position in which a grandmaster has resigned to an opponent, but which still has significant play. Take the winning side and do your best to finish the job, beating your stubborn computer opponent. This is a great way to improve your technique, and will help you begin to finish off winning positions a greatest percentage of the time. 

Preparing with a Computer

One last area in which a computer can help you is by helping you prepare an opening repertoire. While this is an idea that will mostly come in handy for strong players, even club players can occasionally make use of this idea, especially when playing the same opponents again and again.  For instance, imagine you’ve played an opponent with the same color several times in the past, and each time, they’ve been happy to go into the exact same opening line. A computer might give you some ideas on where you can deviate, and then help you better understand the novel position you’ve steered the game into. This preparation can help you get the jump on an opponent that has become overly comfortable with your play, forcing them into untraveled territory where you have a computer guide, and they’re entirely on their own.

Chess, Cheating, and Computers

By , About.com GuideOctober 29, 2012
 
 
Cheating is obviously a serious subject in chess. While this has always been true, the rise of computers threw the issue into the spotlight, as by the last 1990s, it was possible for any player to receive "help" from a computer program who was at least as strong as a grandmaster, if not stronger.

Of course, tournament organizers were able to fight back against this, and -- as far as anyone can tell -- this has kept cheating in chess tournaments to a minimum. However, the rise of mobile devices that can host very strong computer programs themselves has once again raised the specter of cheating as a potential problem in chess. A recent article at Grantland explored the issue, using the case of one scholastic player as an example of what could potentially become a wider problem.

While I don't think that many players want to cheat in tournaments (and even fewer are successful), this is clearly an issue that deserves attention. What do you think is the most effective way to prevent cheating in chess?
 
http://chess.about.com/b/2012/10/29/chess-cheating-and-computers.htm