¿Qué protocolo de interfaz debo implementar para mi motor de ajedrez?

8

Estoy escribiendo un motor de ajedrez en C ++ https://github.com/RomainGoussault/Deepov .

Sé que existen varios protocolos de interfaz (UCI, protocolo Winboard, etc.) y no sé cuál implementar. Me gustaría uno que:

  • permite que mi motor juegue torneos en línea
  • tiene varias GUI para Linux, Windows e iOS
  • tiene algún tipo de documentación

Gracias

Romain
fuente
2
¿Por qué Java? Créeme, te arrepentirás cuando estés optimizando tu motor para la velocidad.
Rafiek
Porque conozco bien Java. También sé que Java es realmente lento en comparación con otros idiomas. Puedo portarlo a C ++ después.
Romain
Ok, pero recomiendo portar lo antes posible;)
Rafiek
1
Portado a C ++ hecho;)
Romain

Respuestas:

9

Solo hay dos protocolos: UCI y Winboard. Winboard es un protocolo antiguo y actualmente no se usa realmente. Crafty es el único motor importante que todavía admite el protocolo Winboard, pero es solo porque el motor también es muy antiguo. UCI es un protocolo más nuevo desarrollado por Shredder, y se usa en todas partes: Windows, Mac, Linux, Android, iOS, etc. UCI es realmente el único protocolo que debe considerar.

  1. UCI es compatible en todas partes
  2. Cada GUI de ajedrez que no sea xboard admite UCI, como Chessbase, Scid, Arena, etc. Incluso xboard puede conectarse a un motor UCI mediante algo conocido como Polyglot.
  3. La documentación de UCI está en http://wbec-ridderkerk.nl/html/UCIProtocol.html

Winboard ha quedado más o menos obsoleto porque el protocolo es más complicado que el UCI más limpio. Winboard es un protocolo establecido, significa que el estado del motor depende de las iteraciones anteriores, mientras que UCI es más fácil de manejar, ya que solo tiene que suministrar su FEN actual o una lista de movimientos.

SmallChess
fuente
1
Una corrección menor en lo anterior: las GUI de ajedrez como Arena generalmente no usan FEN para comunicar estados de juego con UCI. Usan listas de movimientos desde el comienzo del juego. Esto permite que el motor maneje correctamente la regla de cincuenta movimientos y otras características del juego que a menudo no se comunican adecuadamente con FEN. Sin embargo, el protocolo utiliza FEN para configurar posiciones de juego arbitrarias y posiciones en las que se desconoce toda la lista de movimientos. Sin embargo, el póster es correcto en todos los demás detalles.
johnwbyrd
1
@johnwbyrd He editado mi respuesta. Gracias.
SmallChess
1
FEN funciona bien para la regla de cincuenta movimientos. Es la regla de repetición triple que causa problemas.
Kef Schecter
1

No creo que sea posible crear una GUI o un motor como aplicaciones separadas en iOS. iOS evita que una aplicación invoque a otra como parte de su configuración de seguridad. Un autor del motor tiene que escribir la GUI e integrarla con el motor antes de poder solicitar a Apple la aprobación para su lanzamiento en la App Store. Esto también puede ser cierto para Windows RT. Android tiene GUI y motores.

Además de UCI y CECP (Protocolo de comunicación del motor de ajedrez, es decir, winboard / xboard), Chessbase tiene su propio protocolo patentado. Muchos de los motores más potentes usan UCI, mientras que los programadores principiantes suelen usar CECP.

Un transeúnte
fuente
También es cierto para Windows phone.
SmallChess
-3

La mayoría de los motores de soporte GUI, ya sea en UCI o Winboard, UCI se está convirtiendo en un estándar y popular en estos días. Pero, por lo general, si desea que su motor se pueda conectar fácilmente a cualquier GUI (en Windows o Linux), debe tener un "exe" o ejecutable al que puedan apuntar estos programas GUI. Si está construyendo el motor usando Java, entonces no estoy seguro de cómo podría convertir esto en un ejecutable para ser utilizado por la GUI. Lo mismo se aplica para poder jugar torneos en línea. Incluso si planea proporcionar un tipo de interfaz de servicio web para su motor, no creo que pueda participar en competiciones de motores.

Keshav
fuente
No. Java se puede construir de forma nativa para .exe. Java no siempre tiene que ejecutarse en una máquina virtual.
SmallChess
El archivo .exe del que estás hablando es un archivo de motor. El motor debe ser compatible con UCI o Winboard. De lo contrario, ninguna GUI de ajedrez puede leerlo. Tu afirmación no tiene sentido.
SmallChess
No puedo sino reírme de tus comentarios. Intente ejecutar un programa java sin JRE instalado.
Keshav
1
Si hiciste algo de programación, te reirás de ti mismo. Java se puede compilar en un programa nativo.
SmallChess