Karoshi MSX Community
06 de Julio de 2021, 06:49:23 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: 1 [2]
  Imprimir  
Autor Tema: Partidas pesudo-oficiales de Ex-Chess contra otros programas online  (Leído 7466 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Jos'b
Karoshi Maniac
****
Mensajes: 262


« Respuesta #15 : 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 Angry, 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.
« Última modificación: 21 de Octubre de 2011, 12:49:40 am por Jos'b » En línea
msxnake
Karoshi Fan
**
Mensajes: 86


Email
« Respuesta #16 : 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  Grin ). 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í.
En línea
Jos'b
Karoshi Maniac
****
Mensajes: 262


« Respuesta #17 : 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 Cheesy), 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 Cheesy)
En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #18 : 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 Smiley Me apetece jugarlo. Es posible que hasta me gane, porque estoy un poco oxidado en el tema. Y vago.
En línea

--

Cindy Lauper She Bops!
Páginas: 1 [2]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!