Foro SiliconChess - Programas de Ajedrez y Actualidad
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Dentro de un motor de ajedrez

+7
istolacio
chusé II d'Aragón
Fenix
dronstein
hernansp08
ociomatic
pedrox
11 participantes

Página 2 de 2. Precedente  1, 2

Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por Karbunclo Jue Mar 15, 2012 9:39 pm

Pedrox, creo que es sencillo reducir mas o menos el elo sin tantas complicaciones. Te doy 3 ideas:

La primera es el Noise/Ruido en la valoración de cada posición. Un valor ajustable entre 1 y 100, donde sea entre 1 y 100 centipeones de ruido.

La segunda es Noise/Ruido en la valoración de las piezas. Un ruido de entre 1 y 25 centipeones en el valor de las piezas es mas que suficiente. Este último tiene que ser calculado al principio del análisis y no debe cambiar hasta el próximo análisis.

La tercera y ultima es algo de Noise/Ruido en el valor general de las piezas. La idea es hacer que por ejemplo el valor de todas las piezas suban y bajen parejos entre un 50% y un 200% del los valores originales. El resultado es que esto mueve el juego del motor en cada analisis hacia el juego o bien tactico o posicional.

Cada uno de estos Noise/Ruido en las diferentes partes del juego afectan el nivel final del programa y el estilo de diferente manera. Si sumamos todos ellos seguramente el programa terminara jugando un estilo de juego muy impredecible y sumamente bajo, pero con un ajuste fino se podría utilizar para bajar naturalmente el nivel del programa hasta cualquier nivel.

La implementación es sencilla ya que es prácticamente la misma linea de código en diferentes partes del programa.

En el caso de Scorpio por ejemplo, si ademas de esto ultimo también se hicera que todos los parámetros de evaluación quedasen configurables desde un .ini, tendríamos un programa mucho mas configurable que el motor de the King, mas fuerte y con una forma de disminuir el elo no basada en la profundidad de la búsqueda. Seguramente sería muy interesante de hacer y sencillo. Cuando pueda lo haré y lo aportare al proyecto, ya que pienso que hay mucha gente interesada en crear personalidades mas humanas.
Karbunclo
Karbunclo

Mensajes : 38
Fecha de inscripción : 09/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por Fenix Vie Mar 16, 2012 10:25 am

Pedrox, nunca te lo habia dicho, pero excelente trabajo. Todo el material que pones a disposición de los programadores es realmente útil.

Felicitaciones!
Fenix
Fenix
Administrador

Mensajes : 269
Fecha de inscripción : 08/11/2011

https://siliconchess.forosactivos.net

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Vie Mar 16, 2012 7:13 pm

pedrox escribió:He subido como complemento al archivo pdf sobre entornos integrados de desarrollo (IDE) 2 vídeos:

- El primero muestra qué sencillo es descargarse un entorno de desarrollo y configurarlo (DEV-C++ portable). También se descargan 3 motores de ajedrez y se procede a crear un ejecutable para cada uno de ellos. El vídeo ha quedado un poco largo, unos 45 minutos, en parte por utilizar 3 motores en lugar de 1, pero de esta forma comprobáis que no solo funciona con mi motor.

https://www.dailymotion.com/video/xpfeth_dev-c-and-chess-engines_tech

- El segundo vídeo muestra como es posible crear ejecutables de 32 y 64 bit (64 bit siempre que hayamos descargado la versión de 64 bit y luego tengáis un sistema operativo de 64 bit para poder ejecutar el motor creado). También se ve como se puede cambiar alguna opción del compilador para crear ejecutables más rápidos. Este segundo vídeo tiene una duración de unos 23 minutos.

https://www.dailymotion.com/video/xpgeff_dev-c-ejecutable-rapido-para-motor-de-ajedrez_tech

En el segundo vídeo he cambiado lo que se ve en la pantalla en los 2 últimos minutos ya que no se veía bien lo que se estaba explicando, he intentado subir el vídeo con el mismo nombre y dejarlo en la misma dirección, pero no ha sido imposible, así que el link antiguo ahora da error. La nueva dirección es:

https://www.dailymotion.com/video/xphvs7_dev-c-ejecutables-rapidos-de-32-y-64-bit-para-tscp_tech

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Vie Mar 16, 2012 7:34 pm

Fenix escribió:
Pedrox, nunca te lo habia dicho, pero excelente trabajo. Todo el material que pones a disposición de los programadores es realmente útil.

Felicitaciones!

Gracias Fenix.

Karbunclo escribió:Pedrox, creo que es sencillo reducir mas o menos el elo sin tantas complicaciones. Te doy 3 ideas:

La primera es el Noise/Ruido en la valoración de cada posición. Un valor ajustable entre 1 y 100, donde sea entre 1 y 100 centipeones de ruido.

La segunda es Noise/Ruido en la valoración de las piezas. Un ruido de entre 1 y 25 centipeones en el valor de las piezas es mas que suficiente. Este último tiene que ser calculado al principio del análisis y no debe cambiar hasta el próximo análisis.

La tercera y ultima es algo de Noise/Ruido en el valor general de las piezas. La idea es hacer que por ejemplo el valor de todas las piezas suban y bajen parejos entre un 50% y un 200% del los valores originales. El resultado es que esto mueve el juego del motor en cada analisis hacia el juego o bien tactico o posicional.

Cada uno de estos Noise/Ruido en las diferentes partes del juego afectan el nivel final del programa y el estilo de diferente manera. Si sumamos todos ellos seguramente el programa terminara jugando un estilo de juego muy impredecible y sumamente bajo, pero con un ajuste fino se podría utilizar para bajar naturalmente el nivel del programa hasta cualquier nivel.

La implementación es sencilla ya que es prácticamente la misma linea de código en diferentes partes del programa.

En el caso de Scorpio por ejemplo, si ademas de esto ultimo también se hicera que todos los parámetros de evaluación quedasen configurables desde un .ini, tendríamos un programa mucho mas configurable que el motor de the King, mas fuerte y con una forma de disminuir el elo no basada en la profundidad de la búsqueda. Seguramente sería muy interesante de hacer y sencillo. Cuando pueda lo haré y lo aportare al proyecto, ya que pienso que hay mucha gente interesada en crear personalidades mas humanas.

Gracias Karbuncio.

Las 3 opciones que propones son como tu dices bastante sencillas e interesantes, de momento he estado jugando con la primera que es el ruido en la evaluación general y con otra opción que es limitar el número de nodos por segundo que realiza el programa. He intentado ajustar la fuerza del motor en base al ELO y ahí empiezan un poco los problemas, como no tengo adversarios humanos he tratado de ajustar la fuerza de acuerdo a la lista de motores que he publicado en un hilo, para hacer un buen ajuste hay que jugar cientos de partidas y ni siquiera de esa forma estamos seguros de haber conseguido una buena regulación ELO para humanos ya que el ELO de esos motores quizás no se corresponda al ELO comparado con humanos.

Tengo ya una primera versión del programa y la voy a poner en el hilo sobre Scorpio y ahí comento algún detalle más.

Saludos

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Mar Mar 20, 2012 4:57 pm

Subida la lección 8, tiene información sobre el formato PGN, los libros de apertura (especialmente los de Rebel-ProDeo) y la función Tablero_FEN(EPD) que permite tener la posición actual en formato FEN, es necesaria porque para comprobar si la posición es de libro enviamos la posición en ese formato (sirve como intercambio de posiciones entre programas).

En la lección 9, posiblemente trate el tema de las tablebases o bitbases.

En las siguientes lecciones se podría tratar:
- la función que comprueba si recibimos un movimiento del contrario.
- generar una lista con los movimientos posibles en una posición.
- hacer un movimiento y guardarlo en la lista de jugadas.
- comprobar si una casilla es atacada o si el rey está en jaque. Comprobar final de partida.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Jue Mar 29, 2012 3:10 pm

Ya está subida la lección 9 sobre base de datos de finales, haciendo especial interés a las bitbases de Scorpio que es lo que utiliza DanaSah.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Lun Abr 02, 2012 2:03 pm

Lección 10 en la página web. Se estudia la función para comprobar si recibimos un movimiento del contrario y la función que comprueba si es final de partida.

Próxima lección: Generación de movimientos.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Vie Abr 13, 2012 12:20 pm

Lección 11 en la página web. Se estudia la generación de los posibles movimientos para una posición, una cosa importante dentro de un motor y por la cual a veces se clasifica los motores.

En la próxima lección se verá la función para hacer un movimiento y guardarlo en la lista de jugadas. También se verá como deshacer un movimiento si la lección no queda demasiado larga.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Sáb Abr 28, 2012 6:00 am

Lección 12 en la página web. Se estudia la función que permite realizar un movimiento de la lista de movimientos generados para una posición. Gracias a esta función podremos comprobar si el movimiento es legal por no quedarse el rey en jaque. También utilizaremos dicha función para llevar un registro interno de todas las jugadas de la partida, ello permitirá tener controlada la regla de repeticiones de jugadas. También en la lección se estudia la función contraria Deshacer(), deshace un movimiento y permitirá deshacer jugadas a un humano. Ambas funciones asimismo son utilizadas durante el pensamiento (búsqueda del motor).

En la próxima lección se verá la función para saber si una casilla está atacada por una pieza del bando contrario y la función que comprobará si el rey se queda en jaque. Ambas funciones han sido utilizadas en esta lección 12, pero en dicha lección se verá la explicación de su código.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por dronstein Sáb Abr 28, 2012 7:12 am

Muchas gracias por compartir tus conocimientos con nosotros Pedro, tu curso es excelente.

Saludos.
dronstein
dronstein

Mensajes : 3
Fecha de inscripción : 28/02/2012

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por chinete Lun Abr 30, 2012 11:58 am

Que tal pedro, me puse aleer las lecciones, la verdad es que esán muy bien, hay alguna razon para utilizar C como lenguaje de programación ?

chinete

Mensajes : 4
Fecha de inscripción : 29/04/2012

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Mar Mayo 01, 2012 7:41 am

Se pueden utilizar muchos lenguajes de programación para realizar programas de ajedrez, no solamente los hay en C o C++, hay programas en Pascal, Basic, Java, C#, flash, php, Fortram, Lisp y seguramente en muchos más lenguajes que se me olvidan.

Quizás no todos los lenguajes sirvan para crear motores de ajedrez que jueguen en una GUI con protocolo UCI o xboard, por ejemplo posiblemente no se pueda enlazar un motor php o flash a estas GUIs, sin embargo utilizando C, Java, Visual Basic, Delphi y quizás otros es posible.

El lenguaje C es interesante porque es rápido, un motor de ajedrez si queremos que juegue lo mejor posible debe ser lo más rápido posible, el único lenguaje que quizás pueda ser igual de rápido es el Delphi, no considero el lenguaje ensamblador porque hoy en día nadie empieza un motor en este lenguaje ya que los motores son grandes en tamaño y para ganar con el ensamblador habría que ser un especialista para que el código generado fuera mejor que el código generado por ejemplo por el compilador de C, además sería más lento y más complicado modificar los programas. Otra cosa por la que es interesante programar en C es porque puedes encontrar muchos motores de código abierto en este lenguaje, motores incluso como la familia Ippolit que superan los 3200 puntos. Aunque Delphi sea rápido solo Delfi y Boot parece que se aproximan un poco, a unos 2900 puntos. En Java y Visual Basic es complicado ver motores que superan los 2500 puntos (excpetuando cuckoochess).

Un motivo para no realizar un motor en C, es que uno no domina este lenguaje y si que lo hace con otro, que no le importe la fuerza del motor, o simplemente que uno desee aprender un lenguaje y como entrenamiento se dedique a hacer un motor o programa de ajedrez.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Jue Mayo 10, 2012 1:53 pm

Subida la lección 13 en la que se estudia una función importante, la función atacado() que permite saber si una casilla es atacada por las piezas del oponente. Esta función es también importante para saber el rey está en jaque formando parte de la función EstaEnJaque().

Después de estas 13 lecciones ahora podríamos empezar a estudiar como el motor inicia la búsqueda para encontrar el mejor movimiento para la posición del tablero.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Jue Jun 07, 2012 11:50 am

Subida la lección 14 a la página Web. En dicha lección se ve como el motor inicia la búsqueda del mejor movimiento en una posición tras recibir un movimiento del contrario o el comando "go" llamando a la función MotorPiensa(). En dicha función se comprueba primero si la posición corresponde a una posición del libro de aperturas y en ese caso devuelve un movimiento de libro y en caso contrario prepara la búsqueda iniciando una serie de variables y llamando de forma iterativa a la función principal de la búsqueda que es un algoritmo llamado alpha-beta.

En la próxima lección se comenzará a estudiar en detenimiento el algoritmo alpha-beta, el coranzón de un motor de ajedrez.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por dronstein Vie Jun 08, 2012 8:35 am

Excelente noticia pedrox!. Muchas gracias por el aviso.
dronstein
dronstein

Mensajes : 3
Fecha de inscripción : 28/02/2012

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por Fenix Vie Jun 08, 2012 2:49 pm

Muchas gracias. Sigo atento interiorizandome cada vez mas en el tema. Gracias.
Fenix
Fenix
Administrador

Mensajes : 269
Fecha de inscripción : 08/11/2011

https://siliconchess.forosactivos.net

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por SrHead Dom Abr 14, 2013 1:39 pm

Gracias Pedrox por la excelente serie de artículos. Creo que es lo único que hay en español sobre el tema (por lo menos con este nivel de detalle). Es una magnifica ayuda para los que empezamos en esto de la programación de motores.

SrHead

Mensajes : 1
Fecha de inscripción : 14/04/2013

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Dom Abr 14, 2013 2:01 pm

Gracias por el comentario.

Decidí hacer una pausa después de la lección 14 y la llegada del verano 2012. Después por diversos motivos no he encontrado tiempo para retomarlo, pero todavía pienso en continuar con ello. No quiero dar una fecha de cuando será la próxima lección, pero más tarde o temprano creo que la habrá.

Saludos.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por SUPERMOISES Sáb Ago 10, 2013 7:17 pm

YA NINGUNO DE USTEDES PIENSA ESCRIBIR O QUE LES PASA

SUPERMOISES

Mensajes : 66
Fecha de inscripción : 08/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por pedrox Jue Ago 15, 2013 12:43 pm

SUPERMOISES escribió:YA NINGUNO DE USTEDES PIENSA ESCRIBIR O QUE LES PASA
 No tengo ningún problema con este foro, salvo que han pasado varios meses sin un solo mensaje nuevo.

pedrox

Mensajes : 81
Fecha de inscripción : 14/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por chusé II d'Aragón Jue Ago 15, 2013 5:51 pm

Hola Pedro, me descargué hace poco tu excelente trabajo DanaSah-Z, muchas gracias por tu dedicación. La verdad es que hace tiempo que no me pasaba por este foro, pensaba que ya no existía, hasta que hace poco me llegó el mensaje de que habían contestado a un hilo en el que participé. Estaré atento al foro, participaré en lo que pueda. Saludos a todos.

chusé II d'Aragón

Mensajes : 171
Fecha de inscripción : 19/11/2011

Volver arriba Ir abajo

Dentro de un motor de ajedrez - Página 2 Empty Re: Dentro de un motor de ajedrez

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Página 2 de 2. Precedente  1, 2

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.