Estou procurando um mecanismo de xadrez que forneça uma API normal que eu possa usar com alguma linguagem de programação de alto nível como C # ou python. Examinei a lista de líderes (Houdini, Komodo, Stockfish e Rybka) e não consegui encontrar nenhum sinal de que esses mecanismos forneçam API (o que me surpreendeu e sugeriu que estou perdendo alguma coisa).
Para ser menos vago, eis o que eu preciso desta API:
- poder carregar jogo específico no mecanismo
- ser capaz de avaliar a posição do jogo
- ser capaz de fazer uma jogada
Então, alguém conhece um mecanismo que fornece uma API clara para suas funções?
engines
programming
Salvador Dalí
fonte
fonte
Respostas:
Como outros já disseram, UCI é a API que você deseja. As especificações completas do protocolo estão aqui (o arquivo zip é extraído para um arquivo de texto): http://download.shredderchess.com/div/uci.zip
Na verdade, é muito direto e simples, um mecanismo UCI deve responder e responder em texto sem formatação através de stdin, stdout e stderr. De fato, você deve poder iniciar o binário executável de qualquer mecanismo UCI em sua plataforma e emitir os comandos UCI manualmente.
A UCI facilita as instruções de uma GUI ou outro mecanismo para instruir o mecanismo específico a fazer o que você deseja, incluindo analisar um arquivo PGN específico (o carregamento é feito através da GUI ou de um front-end similar, as movimentações brutas são então alimentados ao motor em forma algébrica estendida, como e4 se tornando e2e4). O segundo e o terceiro ponto de seus requisitos são padrão com a UCI, mas cabe a cada desenvolvedor de mecanismo dar suporte a eles (dado o quão baixos esses requisitos são, essa deve ser a maioria deles).
Aqui está um exemplo de UCI em ação na linha de comando:
Os comandos que eu emitei foram uci, isready e quit.
Para utilizar os comandos UCI, você basicamente tem duas opções principais; você pode usar uma interface existente (por exemplo, ChessX, Arena e vários outros) ou pode escrever seu próprio código para emitir instruções para um mecanismo ou grupo de mecanismos. Acredito que já pode haver wrappers Python para acessar os mecanismos UCI, mas eu precisaria verificar novamente. Definitivamente, há python-xadrez (import chess) e pychess (import pychess), simplesmente não consigo me lembrar da extensão de suas funções. Não me lembro onde o pychess está escondido (provavelmente no github ou no google code), mas o python-chess pode ser instalado com o pip.
fonte
standard
valores.Eu pesquisei no "API do mecanismo de xadrez", mas não vi nenhuma API real. Conforme sugerido nos comentários de sua pergunta, eu iria com a UCI. É também assim que as GUI se comunicam com os mecanismos de xadrez.
Se você é realmente um programador hardcore, sempre pode conferir o mecanismo de código aberto Stockfish. É bem possível que exista algum tipo de API nele, ou você pode criar um clone e criar sua própria API para ele.
http://stockfishchess.org/
fonte
python-chess fornece uma API útil e suporta UCI, aparentemente:
http://python-chess.readthedocs.io/en/v0.15.3/uci.html?highlight=engine
O link acima fornece um exemplo de 'bacalhau'.
fonte
O Batch First é um mecanismo de xadrez compilado pelo JIT, escrito em Python, compilado usando o Numba, que permitiria fácil interface C ++ e ainda mais fácil interface Python.
Embora o próprio Batch First seja um mecanismo e não uma API, ele usa e depende muito do pacote Python-Chess , que é uma API incrível.
A compilação JIT do Batch First e o uso de matrizes NumPy para representar placas, permite uma interface Python mais prática (pelo menos uma ordem de magnitude mais rápida) para uso real em um mecanismo de xadrez.
O núcleo do mecanismo é um algoritmo de busca k-best-first-zero-window usado para avaliar RNAs em lotes.
Divulgação completa, sou o autor do mecanismo Batch First.
fonte
Aqui há uma versão portuária do Stockfish em .Net: https://github.com/bpfliegel/Portfish
Para usar esse mecanismo (uma vez compilado), você precisará de uma GUI como Arena http://wwww.playwitharena.com ou ScidVSPC http://scidvspc.sourceforge.net . Esses aplicativos são usados para fornecer uma interface agradável e permitir que você carregue jogos / posições, analise-os (tenho certeza de que você pode carregar um jogo no pgn e analisá-lo por um mecanismo com critérios como "n segundos por movimento" ou " n dobras por jogada "), executar correspondências entre os motores, etc.
Em (quase) todo mecanismo de xadrez, você deve encontrar algo como um arquivo uci.cs ou xboard.cs comprometido com esta tarefa de comunicação.
(Um "mecanismo de xadrez" é um programa capaz de jogar xadrez, mas sem interface gráfica. A maneira como se comunica com aplicativos como Arena ou ScidVSPC é pelos protocolos UCI ou xboard. A maioria dos programas de xadrez é escrita dessa maneira, portanto o desenvolvedor pode esquecer as coisas da GUI e se concentrar no "cérebro").
fonte