Dentro de un motor de ajedrez
+7
istolacio
chusé II d'Aragón
Fenix
dronstein
hernansp08
ociomatic
pedrox
11 participantes
Foro SiliconChess - Programas de Ajedrez y Actualidad :: GENERAL, Sobre Ajedrez :: AJEDREZ INFORMATICO (Máxima actualidad de los programas de ajedrez pc windows mac os linux).
Página 2 de 2.
Página 2 de 2. • 1, 2
Re: Dentro de un motor de ajedrez
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.
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- Mensajes : 38
Fecha de inscripción : 09/11/2011
Re: Dentro de un motor de ajedrez
Pedrox, nunca te lo habia dicho, pero excelente trabajo. Todo el material que pones a disposición de los programadores es realmente útil.
Felicitaciones!
Felicitaciones!
Re: Dentro de un motor de ajedrez
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
Re: Dentro de un motor de ajedrez
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
Re: Dentro de un motor de ajedrez
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.
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
Re: Dentro de un motor de ajedrez
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
Re: Dentro de un motor de ajedrez
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.
Próxima lección: Generación de movimientos.
pedrox- Mensajes : 81
Fecha de inscripción : 14/11/2011
Re: Dentro de un motor de ajedrez
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.
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
Re: Dentro de un motor de ajedrez
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.
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
Re: Dentro de un motor de ajedrez
Muchas gracias por compartir tus conocimientos con nosotros Pedro, tu curso es excelente.
Saludos.
Saludos.
dronstein- Mensajes : 3
Fecha de inscripción : 28/02/2012
Re: Dentro de un motor de ajedrez
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
Re: Dentro de un motor de ajedrez
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.
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
Re: Dentro de un motor de ajedrez
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.
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
Re: Dentro de un motor de ajedrez
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.
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
Re: Dentro de un motor de ajedrez
Excelente noticia pedrox!. Muchas gracias por el aviso.
dronstein- Mensajes : 3
Fecha de inscripción : 28/02/2012
Re: Dentro de un motor de ajedrez
Muchas gracias. Sigo atento interiorizandome cada vez mas en el tema. Gracias.
Re: Dentro de un motor de ajedrez
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
Re: Dentro de un motor de ajedrez
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.
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
Re: Dentro de un motor de ajedrez
YA NINGUNO DE USTEDES PIENSA ESCRIBIR O QUE LES PASA
SUPERMOISES- Mensajes : 66
Fecha de inscripción : 08/11/2011
Re: Dentro de un motor de ajedrez
No tengo ningún problema con este foro, salvo que han pasado varios meses sin un solo mensaje nuevo.SUPERMOISES escribió:YA NINGUNO DE USTEDES PIENSA ESCRIBIR O QUE LES PASA
pedrox- Mensajes : 81
Fecha de inscripción : 14/11/2011
Re: Dentro de un motor de ajedrez
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
Página 2 de 2. • 1, 2
Temas similares
» Motor de ajedrez ?
» Coiled - Motor nuevo.
» PIC Blitz: Microcontrolador y Motor Open Source
» Que son las Tablas hash y que relacion tienen con la fuerza de el motor?
» Deep Fritz 14 - 64 Bits con +100 Elo !! El motor no es de Frans Morsch [Foro Master Pro]
» Coiled - Motor nuevo.
» PIC Blitz: Microcontrolador y Motor Open Source
» Que son las Tablas hash y que relacion tienen con la fuerza de el motor?
» Deep Fritz 14 - 64 Bits con +100 Elo !! El motor no es de Frans Morsch [Foro Master Pro]
Foro SiliconChess - Programas de Ajedrez y Actualidad :: GENERAL, Sobre Ajedrez :: AJEDREZ INFORMATICO (Máxima actualidad de los programas de ajedrez pc windows mac os linux).
Página 2 de 2.
Permisos de este foro:
No puedes responder a temas en este foro.