AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Delphi-News aus aller Welt Utilizar el motor de ajedrez Stockfish con Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Utilizar el motor de ajedrez Stockfish con Delphi

Ein Thema von DP News-Robot · begonnen am 20. Feb 2022
Antwort Antwort
Benutzerbild von DP News-Robot
DP News-Robot

Registriert seit: 4. Jun 2010
15.392 Beiträge
 
#1

Utilizar el motor de ajedrez Stockfish con Delphi

  Alt 20. Feb 2022, 11:20



Hoy veremos cómo usar el motor de ajedrez Stockfish desde un programa Delphi.

Antes hay que conocer qué es un motor de ajedrez:
Un motor de ajedrez es una aplicación informática que ayuda a jugar al ajedrez. Sirve para calcular las jugadas posibles, según las reglas del ajedrez, y proponer las mejores.

Los hay de diferentes niveles de fuerza, pero quizás Stockfish, con un nivel de 3400 puntos sea uno de los más avanzados que existen actualmente

El mejor es AlphaZero, desarrollado por DeepMind, que con sólo 4 horas de autoentrenamiento consiguió derrotar a StockFish, en un match a 100 partidas, ganando 28 y empatando 72.

Desde nuestro punto de vista como programadores el motor de ajedrez es una caja negra, no tenemos por qué saber qué hace internamente, lo único que tenemos que hacer es enviarle una instrucción en forma de comando de texto y obtener y tratar con nuestro programa Delphi la salida que nos proporciona.

Esta comunicación se realiza mediante la interfaz universal de ajedrez (UCI) que es un protocolo de comunicación abierto. En el siguiente link tienen las características de este protocolo.

Inicialmente tenemos que descargar el motor de ajedrez stockfish que se hace desde su propia página, hay versiones para Linux, Windows, Android y Mac

Este motor es opensource y en el propio zip de descarga en la carpeta "src" se encuentra su código por si quieren ver cómo funciona internamente.

https://stockfishchess.org/download/






Una vez descargado lo renombraremos como stockfish.exe

Ahora necesitamos un programa que permita enviar comandos al motor y que se encargue de recibir el resultado que genera.

En nuestro caso voy a utilizar el componente tConsoleIO de Andrey Sevast'yanov que hace un pipe de la entrada y de la salida.

Inicialmente se creó para Delphi 7, pero existe un update para Delphi XE2, que funciona perfectamente hasta Delphi 10.4.2, que es el que yo he utilizado.

Lo primero que tenemos que hacer es una vez que hemos descargado y descomprimido el update para Delphi XE2 instalamos el componente tConsoleIO, para ello abrimos Delphi y desde el menú File / Open abrimos el archivo "MuConsole.dpk"





Hacemos clic con el botón derecho del ratón sobre el ítem MuConsole.bpl y pulsamos INSTALL, una vez terminado el proceso tendremos el componente
tConsoleIO
listo para ser utilizado en nuestros programas.




Probando el programa


Dentro del update para Delphi XE2, tenemos un programa de prueba llamado
TestConsoleIO.exe
(con su código fuente) que nos servirá para probar la comunicación con el motor de ajedrez.

Lo primero que haremos antes de ejecutar el programa es mover el motor stockfish.exe a la carpeta donde se encuentra el programa TestConsoleIO.exe, después lo ejecutamos y escribimos en la caja de texto Application su nombre para que quede así:




y pulsamos el botón RunBtn

Una vez que hemos iniciado el motor ya podremos enviarle órdenes desde la caja de texto "Command".

Por ejemplo.

si escribimos uci y pulsamos el botón SendBtn, veremos las opciones de configuración.






Toda partida de ajedrez se inicia escribiendo el comando
isready
, y el motor nos tiene que devolver el texto readyok si todo es correcto




Ejemplos de órdenes:


setoption name hash value 1024 - Modifica el tamaño de hash

setoption name threads value 2 - Cambia el número de hilos a 2

d - Muestra un display con el tablero de ajedrez



go - Calcula una nueva jugada

stop - Para el proceso de cálculo de nuevas jugadas tan pronto como sea posible


go movetime 1000 - Calcula una nueva jugada en 1000 msegs


position startpos moves g1f3 - mueve el caballo de g1 a la casilla f3

position startpos - inicializa el tablero

Como ejemplo la comunicación UCI entre dos jugardores sería así:


<span style="font-family: arial;"><span data-offset-key="6t64-75-0" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #202123; font-family: ColfaxAI, Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 500; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: break-spaces; widows: 2; word-spacing: 0px;"><span data-offset-key="6t64-75-0" style="box-sizing: border-box;"><span data-text="true" style="box-sizing: border-box;"> 968 >HUMANO: isready
996
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz