PGNからのポジションの干し魚評価


8

コマンドラインを使用して、Stockfishのボード位置(PGN形式)の評価を取得しようとしています。
FEN形式でボードの位置を受け入れることはわかっていますが、PGN形式を提供する方法はありますか?
いいえの場合、PGN形式をFENに変換するにはどうすればよいですか?
私を助けることができるPythonのツールはありますか?

回答:


6

はい、これを行う簡単な方法があります。python-chessモジュールを使用して、Pythonでそれを行う簡単な方法の1つを簡単に紹介します。コード内のコメントが十分でない場合は、コードの説明または可能な拡張機能について自由に質問してください。

実例を紹介するために、私はAdamsとKasparovの間のゲームを取り上げました。ハイパーリンクからPGNをダウンロードできます。そして、私たちのエンジンは公式ウェブサイトから入手した最新のストックフィッシュです。

それを呼ぼうPGNeval.py

import chess
import chess.uci
import chess.pgn
import sys

arguments = sys.argv
pgnfilename = str(arguments[1])

#Read pgn file:
with open(pgnfilename) as f:
    game = chess.pgn.read_game(f)

#Go to the end of the game and create a chess.Board() from it:
game = game.end()
board = game.board()

#So if you want, here's also your PGN to FEN conversion:
print 'FEN of the last position of the game: ', board.fen()

#or if you want to loop over all game nodes:
#while not game.is_end():
    #node = game.variations[0]
    #board = game.board() #print the board if you want, to make sure
    #game = node         

#Now we have our board ready, load your engine:
handler = chess.uci.InfoHandler()
engine = chess.uci.popen_engine('...\stockfish_8_x64') #give correct address of your engine here
engine.info_handlers.append(handler)

#give your position to the engine:
engine.position(board)

#Set your evaluation time, in ms:
evaltime = 5000 #so 5 seconds
evaluation = engine.go(movetime=evaltime)

#print best move, evaluation and mainline:
print 'best move: ', board.san(evaluation[0])
print 'evaluation value: ', handler.info["score"][1].cp/100.0
print 'Corresponding line: ', board.variation_san(handler.info["pv"][1])

前述のゲームPGNでテストしてみましょう。コマンドは次のとおりです。

python PGNeval.py adams_kasparov_2005.pgn

そして、これが私が得る出力です:

FEN of the last position of the game: br3r2/5ppk/p2pp3/4b1BP/N3P3/q4P2/1PnQB3/1K4RR w - - 4 27 best move: Qxc2 evaluation value: -10.87 Corresponding line: 27. Qxc2 Rfc8


1
(エンドノードだけでなく)ゲームの任意のノードにトラバースできる方法はありますか?
Janmejaya Nanda 2017

2
はい、ノードをループするだけです。編集でこれを行う1つの方法を追加しました。
エリー

1
variationsgame最後まで移動するために再割り当てするすべての子ノードを提供します。あなたの助けをフォノンに感謝します。
Janmejaya Nanda 2017

3
どういたしまして。このモジュールをいじって楽しんでください。よく書かれています。
エリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.