Karoshi MSX Community

MSX Actualidad => General => Mensaje iniciado por: Jos'b en 15 de Octubre de 2011, 10:14:15 am



Título: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Jos'b en 15 de Octubre de 2011, 10:14:15 am
Primera partida pseudo-oficial entre dos programas de ajedrez amateur, con blancas juega EX-Chess (MSX) y con negras Toledo Javascript Chess (http://nanochess.110mb.com/chess4_es.html)

1.e4 e5
2.Dh5 g5
3.Ac4 d5 ?
4.exd5 Cd7
5.Cc3 Ad6
6.Ce4 h6
7.Cf3 Re7???? (que horror de jugada)
8. O-O f5
9.Cfxg5? Df8
10.Te1 fxe4
11.Cxe4 Cgf6
12.Dg6 Tg8
13.Df5 Cxe4
14.Dxe4 Cf6
15.De3 b5
16.Axb5 Cxd5
17.Df3 Dxf3
18.d3 Dxg2#

Cometarios (mis cometarios obviamente) a la partida.

Como se puede observar Ex-Chess definitivamente no incluirá un libro de aperturas, cuestión de memoria, quizás si fuese un megarom se podría incluir un libro decente de aperturas, ese es el motivo de que ya en la segunda jugada realice un movimiento de dama a h5 ya que considera que al ser la dama la pieza de más valor tiene una movilidad y da una superioridad en la posición superior al resto de piezas, tampoco tiene un criterio claro de desarrollo (algo que debo subsanar antes de presentar la versión definitiva a la DEV). Por suerte Toledo Chess tampoco hace una jugada de desarrollo buena, 2. … g5 es un  locura bastante temeraria. Tampoco se explica bien la jugada 3. … d5, que pierde peón directamente (y que como no podía ser de otra manera Ex-Chess se toma la libertad de tomarlo), sobre todo porque Toledo Chess es un programa que puede ver hasta la tercera jugada (supongo que jugadas completas, 6 movimientos).

Otro claro error de Toledo Chess es 7. … Re7??, ya que despues de 7. … Cdf6 8. Cxf6+ Cxf6 gana la Dama Blanca !!!! (de esta jugada deduzco que en realidad  solo es capaz de ver 3 medias jugadas (o 1,5 jugadas completas)

8. O-O ? esta vez un claro error de Ex-Chess, mucho mejor Cxg5 amenazando mate, el caballo no se puede tomar por quedar la Torre descubierta en h8.

9. Cfxg5?? otro error, porque no toma directamente con el caballo de e4 que es el que está amenazado (problema para resolver), Toledo Chess reacciona muy bien cuando juega Df8 evitando el mate en 1 que hay en f7 (y que sin duda daría Ex-Chess si tiene oportunidad). Aunque Ex-Chess pierde un caballo a cambio de dos peones (obviamente un mal cambio) en una posición tan abierta podría considerarse como un sacrificio en beneficio de la iniciativa y ataque.

16. Axb5 tampoco es bueno, es necesario mantener el peón en d5, un caballo tan en el centro es muy peligroso y como se demuestra en el resultado final de la partida 16. … Cxd5 fue definitivo.

Las retiradas de la Dama responden a un criterio claro de mantener la máxima movilidad, y que finalmente aloja en f3?? lo que permite a Toledo Chess aprovechar la clavada del peon g2 para llevarse la dama limpia y ganar la partida.


Esta es otra partida pesudo-oficial contra otro programa en javascript (http://p4wn.sourceforge.net/5k/) de tambien solo 5kb, en el que Ex-Chess también juega con blancas.

1.e4 Cf6 2.Df3 e5 3.Ac4 Ad6 4.De3 b5 5.Axb5 Ab7 6.Cf3 Axe4 7.O-O c6
8.Ad3 Db6 9.Axe4 Dxe3 10.fxe3 Cxe4 11.Cc3 Cc5 12.Cg5 h6 13.Cxf7 Tf8
14.Cxd6+ Re7 15.Cce4 Cxe4 16.Cxe4 g5 17.Tf6 Txf6 18.Cc5 Td6 19.Ce4
Td5 20.d4 exd4 21.Ad2 Te5 22.exd4 Txe4 23.Ac3 d5 24.Tf1 a5 25.b3 Te3
26.Ad2 Te2 27.Td1 c5 28.dxc5 a4 29.h3 axb3 30.axb3 d4 31.g4 d3 32.
cxd3 Ca6 33.d4 Tb8 34.b4 Te4 35.Ac3 Cxb4 36.d5 Ca2 37.Ad4 Td8 38.d6+
Rf7 39.Td2 Cb4 40.Ac3 Cc6 41.Ta2 Td7 42.Ta8 Re6 43.Tf8 Tc4 44.Tf3
Txc5 45.Td3 h5 46.gxh5 g4 47.hxg4 Rf7 48.h6 Re6 49.Ag7 Tc1+ 50.Td1
Txd1+ 51.Rg2 Td2+ 52.Rg3 Td3+ 53.Rg2 Td2+ 54.Rg3 Td3+ 55.Rg2 Td2+  (y tablas por jaque continuo !!!!)

Conclusión: Aunque el motor esta en un estado muy avanzado todavía necesita mejorar en muchos aspectos, obviamente en esta última partida se ve claramente algunas carencias de Ex-Chess, debe mejorar el cambio de piezas y la forma de reaccionar ante los jaques (claro defecto despues de 50 Td1 que se deja la torre totalmente limpia). Otros aspectos que aún no están implementados son: mejorar el desarrollo de piezas inicial e implementar finales, para que sepa como avanzar peones y como buscar mates elementales de dama y rey contra rey, incluso torre o dos torres y rey contra rey haya o no peones para que mejore la fase final de juego.

En definitiva, espero que a los que guste jugar ajedrez le haya resultado curiosas estas partidas.


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: _ThEcRoW en 15 de Octubre de 2011, 04:16:25 pm
Como haces que se comuniquen entre si?. Introduces manualmente los datos en uno y otro simulador?.
Saludos!!!


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Jos'b en 15 de Octubre de 2011, 07:03:29 pm
Pues si, manualmente  :D, voy alternando las ventanas e introduciendo los movimientos.

Aunque hay algunos protocolos (basicamente UCI y Winboard) para la comunicacion entre los diferentes engines e interfaces gráficos que se podrían utilizar para hacer que dos máquinas se puedan enfrentar entre sí, pero solo los engines que aspiran a algo más que la pura diversión suelen incluirlos.


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: pitpan en 15 de Octubre de 2011, 08:23:50 pm
Pues qué bien que hayas conseguido un engine operativo. Hacer algo así con los recursos de un MSX tiene su mérito.


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: msxnake en 16 de Octubre de 2011, 01:44:26 pm
 Hace algunos años yo también hice un programa que jugaba al ajedrez para pc. Aunque debo admitir que estará perdido en mis disquetes de 3 1/2. Creo que también tenía una profundidad hasta 3 pero analizaba todas las posibles ramas. El algoritmo era simple  y no estaba optimizado y tardaba lo suyo en un 386.


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Jos'b en 16 de Octubre de 2011, 06:21:31 pm
Pues qué bien que hayas conseguido un engine operativo. Hacer algo así con los recursos de un MSX tiene su mérito.
Pues si, y muy divertido, casi todo el tiempo lo dedico a buscar errores en la valoracion de las posiciones (en realidad muy poco de programacion y mucho de cambiar parametros aquí y allá)

Hace algunos años yo también hice un programa que jugaba al ajedrez para pc. Aunque debo admitir que estará perdido en mis disquetes de 3 1/2. Creo que también tenía una profundidad hasta 3 pero analizaba todas las posibles ramas. El algoritmo era simple  y no estaba optimizado y tardaba lo suyo en un 386.
La verdad que me alegra saber que no soy el único que disfruta (o ha disfrutado) haciendo un juego de ajedrez.

ExChess no está basado en el calculo a base de fuerza bruta a número fijo de jugadas, sino que analiza la posición a media jugada. La idea es doble, por un lado poder hacer un juego de ajedrez para MSX que no tarde una hora en mover, y por otro lado tener un prototipo base para 'quizás' en un futuro intentar hacer algo más evolucionado para PC. De esta manera puedo comprobar realmente como el engine valora la posición final.

El problema de hacer un analisis a profundidad fija es que el ordenador puede pasar por alto buenas jugadas debido a que puede cortar el analisis en una posición donde se estan produciendo cambios (un ejemplo claro es la partida de ExChess contra Toledo javascript donde en la jugada séptima juega Rey a e7 en lugar de jugar el Caballo de d7 a f6, que lleva a comerse la Dama Blanca, le faltó media jugada más para poder verlo). Los programas actuales lo que hacen cuando llegan a una profundidad fija(nunca inferior a 4 movimientos) es ver si la posición es tranquila, si es así, se limitan a valorar la posición según los criterios que le hayan metido sus programadores, o por el contrario ver si la posición es violenta, aumentando la profundidad de análisis o añadiendo alguna función específica para estos casos. Este es el criterio que estoy intentando seguir, pero aplicado a media jugada, usar unos criterios para posiciones pasivas (en los que no intervengan cambios) y el uso de una función especial para cuando haya posiciones más violentas que impliquen cambios y demás.

Para mi, lo más sencillo hubiera sido hacer un algoritmo que recorra todas las posibilidades a una profundidad fija, de eso 3 o 4 jugadas, y hacer un simple conteo de material y movilidad de las piezas (sin ni siquiera complicarme la vida haciendo una poda selectiva de las ramas que se preveen peores). Al principio hice unas pruebas a una profundidad de 2 movimientos y tardaba alrededor de 5 minutos por cada movimiento (con mi código en C), así que, teniendo en cuenta que el Ajedrez no es un juego que vaya tener mucho éxito entre el público MSXero y que lo hago como un reto personal, opté por cambiar el sistema al análisis lógico de la posición base (que es mucho más divertido) y así, si algún día decido hacer algo mejor e incrementar la profundidad de análisis, ya tengo asegurado que lo que el engine finalmente va a valorar es bastante fiable.

 
... y bueno, creo que voy a cortar ya, con este tema me animo y no se parar  ;D


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Jon_Cortazar en 16 de Octubre de 2011, 07:00:00 pm
Me quedo picuet ante tanto nivel :o. Yo no sabría ni cómo empezar a plantearme un motor de esas características. Bravo, Jos'b!


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: nanochess en 16 de Octubre de 2011, 11:05:06 pm
Bien hecho  ;) , lo más importante es que ya tienes funcionando tu programa y ahora puedes mejorarlo.


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Imanok en 17 de Octubre de 2011, 08:18:17 am
Mola mucho la idea de poder enfrentar tu juego contra el que ha hecho otra persona  :)

Mucho ánimo y a ver si queda un juego bien chulo! ;)


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Jos'b en 18 de Octubre de 2011, 07:44:25 am
 :D

Gracias por los ánimos.

Y chulo va a quedar, por lo menos por fuera   ::),  por dentro ya veremos  ;D


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Konamito en 19 de Octubre de 2011, 10:26:57 am
Yo apenas me he enterado de lo que has comentado (soy un negado en ajedrez) pero me alegra de que consigas que dos scripts jueguen uno contra el otro.

Un saludo.


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: MsxKun en 19 de Octubre de 2011, 07:19:44 pm
Mola el proyecto.

Yo jugaba al Master Chess (cassette, DRO?) Y no estaba mal. Tardar en pensar.. dependia del nivel (creo recordar..) Lo que si pasaba es que si tardaba mucho podias "presionar" a la maquina pulsando RETURN y entonces hacia la jugaba que hubiera calculado hasta entonces. Era un poco chanchullo, pero si tenias prisa o ibas perdiendo.. :P

Asi que podrias hacer algo asi. Poner varios niveles de dificultad. El que no le importe que la maquina se pegue rato pensando, que elija el modo chungo. Ahora bien, si ya lo tienes hecho asi y eso va a ser complicado de modificar, ni te calientes. Tal como estan las cosas bastante es con jugar. Yo ya no tengo paciencia, las ultimas partidas al ajedrez que he hecho, con un juego para GP2X, me ganaba :( Asi que no he vuelto a jugar xD


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Jos'b en 20 de Octubre de 2011, 04:09:03 pm
Yo apenas me he enterado de lo que has comentado (soy un negado en ajedrez) pero me alegra de que consigas que dos scripts jueguen uno contra el otro.
Espero que este jueguecillo sirva para animarte a echar alguna patida  :D

Mola el proyecto.
Gracias

Yo jugaba al Master Chess (cassette, DRO?) Y no estaba mal. Tardar en pensar.. dependia del nivel (creo recordar..) Lo que si pasaba es que si tardaba mucho podias "presionar" a la maquina pulsando RETURN y entonces hacia la jugaba que hubiera calculado hasta entonces. Era un poco chanchullo, pero si tenias prisa o ibas perdiendo.. :P
Yo tambien he jugado con él, de hecho creo que hay varios juegos de ajedrez que usan el mismo motor. De todas formas prefiero Cyrus II y Colossus 4 Chess, el mejor de todos y que además tengo en cinta original. Hace tiempo que intento hacerme de una copia en disco para poder seguir jugando, pero desgraciadamente las que circulan por internet no rulan bien  ???

Asi que podrias hacer algo asi. Poner varios niveles de dificultad. El que no le importe que la maquina se pegue rato pensando, que elija el modo chungo. Ahora bien, si ya lo tienes hecho asi y eso va a ser complicado de modificar, ni te calientes. Tal como estan las cosas bastante es con jugar. Yo ya no tengo paciencia, las ultimas partidas al ajedrez que he hecho, con un juego para GP2X, me ganaba :( Asi que no he vuelto a jugar xD
Bueno poner niveles no es ni fácil ni dificil, es plantearme de nuevo el juego. Desgraciadamente la rutina que genera los movimientos legales está preparada para generar solamente los movimientos pseudo-legales, sin incluir los jaques, basicamente por dos razones, puedo usarla para calcular la movilidad (evitando que el ordenador busque el jaque de forma desesperada) y la segunda y más importante, porque al incluir los jaques la rutina se hace muy lenta. Esto que parece una chorrada me impide que al recorrer el árbol de variantes pueda detectar algún mate o posición de tablas en alguna jugada intermedia (que de otra forma se podría detectar simplemente viendo si los movimientos generados son igual a cero). Si no se puede mover, o está en mate o es tablas  ;D

Así que, a tres meses vista de la fecha límite de la DEV, no quiero plantearme la reprogramación de gran parte del código (con los problemas de testeo que siempre suelen surgir) y tirar 'palante' tal como está (que no es poco) y centrarme en mejorar algunos defectillos que aún tiene. Y si el año que viene seguimos vivos como comunidad MSX ;D, quizas intente mejorarlo o meterme en algún que otro proyectillo.




Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Konamito en 20 de Octubre de 2011, 04:34:49 pm
Yo apenas me he enterado de lo que has comentado (soy un negado en ajedrez) pero me alegra de que consigas que dos scripts jueguen uno contra el otro.
Espero que este jueguecillo sirva para animarte a echar alguna patida  :D

Lo haré ;)


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: msxnake en 20 de Octubre de 2011, 09:20:21 pm
  Cuando yo programé el mío, el tema del enroque era lo que me daba mas pereza. Lo dejé justo para el final. Las escepciones que puede tener un enroque me liaron un poco. Allí utilicé una variable para asegurarme que el rey no se había movido antes, y tenía que calcular si estaba en posición de jaque (un poco rollo todo). Además encima tenemos el enroque largo y el corto para variar.
  Implementé una rutina que hacía que se enfrentara a si mismo pero con identidades distintas... por ejemplo el tema de mover los peones, o el tema del valor del alfil o caballo, atacar el centro, etc.
  Cuando ya tenía el tema gráfico muy logrado, empezé a re-programarlo para optimizar el tiempo de respuesta pero al final me cansé del proyecto y lo abandoné.


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Jos'b en 21 de Octubre de 2011, 12:47:58 am
 Cuando yo programé el mío, el tema del enroque era lo que me daba mas pereza. Lo dejé justo para el final. Las escepciones que puede tener un enroque me liaron un poco. Allí utilicé una variable para asegurarme que el rey no se había movido antes, y tenía que calcular si estaba en posición de jaque (un poco rollo todo). Además encima tenemos el enroque largo y el corto para variar.
  Implementé una rutina que hacía que se enfrentara a si mismo pero con identidades distintas... por ejemplo el tema de mover los peones, o el tema del valor del alfil o caballo, atacar el centro, etc.
  Cuando ya tenía el tema gráfico muy logrado, empezé a re-programarlo para optimizar el tiempo de respuesta pero al final me cansé del proyecto y lo abandoné.
Una pena que abandonaras el proyecto >:(, entre otras cosas porque se ve que sabes de que va un poco el tema.

La verdad es que el enroque me consume bastante código, hay que tener en cuenta que no se ha movido ninguna de las torres, que el rey tampoco se ha movido, que no esta en jaque y que ademas no pasa por ninguna casilla dominada por piezas contrarias. Vamos yo lo he hecho a base de variables booleanas.

Tambien otro tema que me ha dado quebraderos de cabeza es el tema de comer 'al paso', una jugada un poco especial con la que se puede comer un peón que avanza dos pasos desde la posición inicial, y que solo se puede hacer solamente una vez y justo inmediatamente después de realizar la jugada de avance.

Por suerte he conseguido implementar todas las reglas FIDE, a excepción de las tablas por repetición de posición y de la jugada 50. Que se podría implementar fácilmente, pero voy un poco escaso de memoria y esto solo serviría para aumentar el código tontamente.

Por otro lado ExChess solo tiene dos funciones elementales sobre las que se monta toda la lógica, la más importante es la que nos indica cuantas piezas dominan un punto. Una función universal que se puede utilizar para saber si el Rey está en jaque, si alguna pieza está siendo atacada más que defendida, etc. A partir de ahí todo es cuestión de usar sentencias condicionales del tipo 'if' y asignarles diferentes preferencias. Esto es lo que me está llevando más tiempo, porque no es fácil hacerle entender al programa que a veces el hecho de que el adversario pueda comer un peón gratis, no es necesariamente una perdida y puede traer como consecuencia alguna ventaja de material en alguna que otra combinación. Si consiguiera esto de una forma más o menos decente, me plantearía  hacer algo para PC mucho más serio. Pero de momento no me esta resultando fácil.


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: msxnake en 24 de Octubre de 2011, 10:32:40 pm
   Bueno, también es cierto que partes de una máquina pobre en recursos (aquí me van a matar  ;D ). El hecho de deshacerte de líneas que podrían resultar fructíferas es más que obvio para dar más soltura al cálculo. En una máquina potente recorrerías esas líneas hasta cierta profundidad. Una vez le preguntamos al maestro de ajedrez ELO 2390 (Luís Enrique), como se hacía para jugar simultáneas... nos contestó que tambien hay un factor de intuición de la posición, vamos que se juega un poco por intuición. --- > y ahí la pregunta del millón... eso como lo programas?  Pero estoy seguro que estas haciendo un buen trabajo y sigue así.


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: Jos'b en 25 de Octubre de 2011, 11:28:20 am
Siiii, eso es, has dado en el clavo.

Si te fijas en lo que he ido relatando a lo largo de este Topic lo que estoy intentando hacer es un programa basado en eso que tu amigo llama intuición. En el fondo, hacer que el programa juegue en base a unos patrones que se puedan extraer de la posición en sí. Y no en el abuso del cálculo de enormes variantes, vamos, a fuerza bruta.

Esto es más o menos lo que quiero hacer entender a los que estén leyendo este topic. Si consigo que a “media jugada” el programa se comporte de una forma más o menos buena (siempre dentro de las limitaciones del MSX), todo el trabajo realizado en este programa lo podría utilizar para otro de mayor calado en el que ya se incluyese una profundidad fija, o no, de variantes.

Por otro lado, lo que tu amigo llama intuición, en el fondo no es más que una larga experiencia de juego. ¿No se si eres jugador habitual? ¿o qué conocimientos tienes de ajedrez?. Si es así, sabrás que cualquier aficionado sabe detectar las debilidades a simple golpe de vista, por ejemplo, todo el mundo sabe que “en general” hay que controlar en el centro, que no es bueno tener los peones doblados o aislados, o que las torres deben colocarse en las columnas abiertas, o detrás de los peones para proteger el avance de estos, etc, etc. En ajedrez existe lo que se conocen como “jugadas naturales” que son como su nombre indica las que se hacen “sin pensar”. Y esto SI se puede programar, de hecho se ha hecho.

Hay una página, esta página

http://wbec-ridderkerk.nl/html/BayesianElo_ed18.htm

donde los diferentes motores de ajedrez compiten entre sí para demostrar cuál es mejor. Resulta curioso ver, como entre los dos mejores, hay uno que es totalmente gratuito (y de código abierto), stockfish, que tiene un ELO de 3120. Comparándolo con el que fue campeón del mundo, Gary Kasparov de TAN SOLO 2850 de ELO (aproximadamente), lo deja en pañales.

Aquí en Extremadura, hay tan solo un Gran Maestro (MIGUEL LLANES) que tiene una fuerza de unos 2480 (estoy hablando de memoria), del que tuve la suerte de hacer el bloque especifico de entrenadores, y cuando hablaba de los Grandes Maestros del nivel de Kasparov, hablaba de Super Grandes Maestros. Lo que quiero decir es que si un Gran Maestro ya ve a otro, que le saca una diferencia de unos 400 puntos ELO, como Super Gran Maestro, imagínate como vería el Campeón del Mundo de Ajedrez a una máquina que le saca, pues eso, 300 o 400 puntos de ELO.

Con todo este rollo, y tómese como mi visión personal (y también como mi disfrute con este tema :D), a dónde quiero llegar es, que ya se ha superado muy mucho la etapa en la que aún se ponía en duda la competitividad entre hombre-computadora. Y ahora hay quién afirma, que el mejor jugador de ajedrez debe ser buen alumno de las máquinas.

(... y ya esta, después de este rollo pido hasta perdón :D)


Título: Re: Partidas pesudo-oficiales de Ex-Chess contra otros programas online
Publicado por: MsxKun en 25 de Octubre de 2011, 11:37:25 am
Yo solo leyendo los comentarios ya me parece que el juego va a ser muy digno :) Me apetece jugarlo. Es posible que hasta me gane, porque estoy un poco oxidado en el tema. Y vago.