Estoy buscando un motor de ajedrez que proporcione una API normal que pueda usar con algún lenguaje de programación de alto nivel como C # o python. Revisé la lista de líderes (Houdini, Komodo, Stockfish y Rybka) y no pude encontrar ninguna señal de que estos motores proporcionen API (lo que me sorprendió y sugirió que me falta algo).
Para ser menos vago, esto es lo que necesito de esta API:
- ser capaz de cargar un juego específico en el motor
- poder evaluar la posición del juego
- ser capaz de hacer un movimiento
Entonces, ¿alguien conoce un motor que proporcione una API clara para sus funciones?
engines
programming
Salvador Dalí
fuente
fuente
Respuestas:
Como otros han dicho, UCI es la API que desea. Las especificaciones completas del protocolo están aquí (el archivo zip se extrae en un archivo de texto): http://download.shredderchess.com/div/uci.zip
En realidad es muy sencillo y sencillo, un motor UCI debe responder y responder en texto plano a través de stdin, stdout y stderr. De hecho, debería poder iniciar el binario ejecutable de cualquier motor UCI en su plataforma y emitir los comandos UCI manualmente.
UCI facilita instrucciones de una GUI u otro motor para indicarle al motor específico que haga lo que sea que desee que haga, incluido el análisis de un archivo PGN específico (la carga es a través de la GUI o un front-end similar, los movimientos sin procesar luego se alimentan al motor en forma algebraica extendida, como que e4 se convierta en e2e4). Los puntos segundo y tercero de sus requisitos son estándar con UCI, pero corresponde a cada desarrollador de motores respaldarlos (dada la escasez de esos requisitos, esa debería ser la mayoría de ellos).
Aquí hay un ejemplo de UCI en acción en la línea de comando:
Los comandos que emití fueron uci, isready y quit.
Para utilizar los comandos UCI, esencialmente tiene dos opciones principales; puede usar una interfaz existente (por ejemplo, ChessX, Arena y una gran cantidad de otras) o puede escribir su propio código para emitir instrucciones a un motor o grupo de motores. Creo que ya puede haber envoltorios de Python para acceder a los motores UCI, pero necesitaría verificarlo nuevamente. Definitivamente hay python-chess (import chess) y pychess (import pychess), simplemente no puedo recordar el alcance de sus funciones. No recuerdo dónde está acechando pychess (probablemente github o código de google), pero python-chess se puede instalar con pip.
fuente
standard
valoresBusqué en Google la "API del motor de ajedrez" pero no he visto ninguna API real. Como se sugiere en los comentarios de su pregunta, iría con UCI. Esta es también la forma en que las GUI se comunican con los motores de ajedrez.
Si realmente eres un programador incondicional, siempre puedes consultar el motor de código abierto Stockfish. Es muy posible que haya algún tipo de API incorporada, o podría hacer un clon y construir su propia API para él.
http://stockfishchess.org/
fuente
python-chess proporciona una API útil y admite UCI, aparentemente:
http://python-chess.readthedocs.io/en/v0.15.3/uci.html?highlight=engine
El enlace de arriba da un ejemplo de 'stockfish'.
fuente
Batch First es un motor de ajedrez compilado JIT escrito en Python, compilado usando Numba, que permitiría una interfaz C ++ fácil y una interfaz Python aún más fácil.
Si bien Batch First en sí mismo es un motor, no API, utiliza mucho y se basa en el paquete Python-Chess , que es una API increíble.
La compilación JIT de Batch First, y el uso de matrices NumPy para representar tableros, permite una interfaz Python más práctica (al menos un orden de magnitud más rápido) para uso real en un motor de ajedrez.
El núcleo del motor es un algoritmo de búsqueda k-best-first de cero ventanas utilizado para evaluar ANN en lotes.
Divulgación completa, soy el autor del motor Batch First.
fuente
Aquí hay una versión de puerto de Stockfish en .Net: https://github.com/bpfliegel/Portfish
Para usar este motor (una vez que está compilado), necesitará una GUI como Arena http://wwww.playwitharena.com o ScidVSPC http://scidvspc.sourceforge.net . Estas aplicaciones se utilizan para proporcionar una interfaz agradable y le permiten cargar juegos / posiciones, analizarlos (estoy bastante seguro de que puede cargar un juego en pgn y analizarlo por un motor con criterios como "n segundos por movimiento" o " n capas por movimiento "), ejecutar partidos entre motores, etc.
En (casi) cada motor de ajedrez, debe encontrar algo como un archivo uci.cs o xboard.cs que se compromete con esta tarea de comunicación.
(Un "motor de ajedrez" es un programa que es capaz de jugar ajedrez pero no tiene una interfaz gráfica. La forma en que se comunica con aplicaciones como Arena o ScidVSPC es mediante los protocolos UCI o xboard. La mayoría de los programas de ajedrez se escriben de esta manera, por lo que el desarrollador puede olvidarse de las cosas de la GUI y centrarse en el "cerebro").
fuente