Claro, há uma maneira: vou mostrar a você uma maneira de fazer isso sozinho, usando apenas software livre. Vamos escrever um pequeno script em Python (estou usando v2.7) e usar apenas a maravilhosa biblioteca python-chess (licenciada sob GPL3, observe que estou usando a versão 0.14.0).
Em suma, o script carregará primeiro o mecanismo, vamos nos ater ao código-fonte livre e aberto usaremos o incrível motor Stockfish [*] e, em seguida, criaremos uma instância do tabuleiro da posição que você deseja analisar (usando a notação FEN) e geraremos todos os movimentos legais e, por fim, peça ao mecanismo para avaliar cada movimento por um período de tempo predefinido (neste exemplo, é definido como 1 segundo de tempo de ponderação). Aqui está um exemplo funcional:
import chessimport chess.uci # Vamos tentar nosso código com a posição inicial do xadrez: fen = 'rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR w KQkq - 0 1'board = chess.Board (fen) handler = chess.uci.InfoHandler () # Agora certifique-se de fornecer o local correto para o arquivo do mecanismo stockfish # ... na linha a seguir: por exemplo, / home /.../ stockfish_6_x64engine = chess.uci.popen_engine ('stockfish_6_x64') engine.info_handlers.append (handler) engine.position (board) if board.turn: print 'Branco para mover' outro: imprimir 'preto para mover 'para el em board.legal_moves: engine.go (searchmoves = [el], movetime = 1000) print str (board.san (el)),' eval = ', round (handler.info ["score"] [1 ] .cp / 100.0,2)
Observe que esta não é necessariamente a melhor / mais eficiente maneira de fazer isso, escrevi isso em 5 minutos apenas para mostrá-lo em um nível básico sem usar nenhum recurso avançado do mecanismo, tenho certeza de que você se sairá muito melhor sozinho. De qualquer forma, aqui está a saída depois de executá-lo (supondo que você tenha o python instalado em qualquer sistema operacional que esteja usando, o mesmo vale para a biblioteca python-chess):
White to moveNa3 eval = -0.39Nc3 eval = 0.15Nf3 eval = 0.15Nh3 eval = -0.37a3 eval = 0.01b3 eval = -0.15c3 eval = -0.03d3 eval = -0.06
e3 eval = 0,12f3 eval = -0,49g3 eval = -0,33h3 eval = 0,0a4 eval = -0,12b4 eval = -0,67c4 eval = 0,07d4 eval = 0,17e4 eval = 0,17f4 eval = -0,15g4 eval = -0,74 h4 eval = -0,15
Pronto! A beleza de tudo isso é, obviamente, o fato de que você agora tem seu próprio software para trabalhar, modificar e estendê-lo como desejar ... sem limitações. Tudo muito fácil de fazer, apenas familiarize-se com o funcionamento da biblioteca que estamos usando seguindo sua documentação e se surpreenda;)
Não hesite em perguntar se você tiver alguma dúvida sobre o código ou adicionar funcionalidades potenciais.
[*]: que também é um dos motores de xadrez atuais mais fortes.
Edite para atender ao pedido comum:
Aqui está a versão atualizada do mesmo código usando a versão mais recente:
python-chess 0.30.0 e usando o Stockfish mais recente
import chessimport chess.engineimport os # aqui, assumimos que o arquivo do mecanismo está na mesma pasta que nosso scriptpath python = os.getcwd () # Vamos tentar nosso código com a posição inicial do chess: fen = 'rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR w KQkq - 0 1'board = chess.Board (fen) #Agora certifique-se de fornecer o local correto para seu arquivo de motor stockfish # ... em a linha que segue definindo corretamente pathengine = chess.engine.SimpleEngine.popen_uci (path + '/' + 'stockfish-10-64') if board.turn: print ('White to move') else: print ('black to move ') para el em board.legal_moves: info = engine.analyse (board, chess.engine.Limit (time = 1), root_moves = [el]) t = str (info ["pontuação"]) se t.st artswith ('#'): print (str (board.san (el)), "eval = mate in", t) else: print (str (board.san (el)), "eval =", round (int (t) /100.,2)) engine.quit ()
A saída para o tempo de ponderação definido como 1 segundo por movimento encontrado chess.engine.Limit (time = 1 )
:
Brancas para moverNh3 eval = -0.43Nf3 eval = 0.69Nc3 eval = 0,29
Na3 eval = -0,35h3 eval = 0,41g3 eval = -0,2f3 eval = -0,62e3 eval = 0,45d3 eval = 0,03c3 eval = 0,19b3 eval = 0,1a3 eval = 0,46h4 eval = -0,42g4 eval = -1,22f4 eval = -0,07e4 eval = 0,82d4 eval = 0,63c4 eval = 0,57b4 eval = -0,26a4 eval = -0,02