Đánh giá cá kho của một vị trí từ PGN


8

Tôi đang cố gắng để có được đánh giá của Stockfish về vị trí bảng (ở định dạng PGN) bằng cách sử dụng dòng lệnh.
Tôi biết nó chấp nhận vị trí bảng trong định dạng FEN, nhưng có cách nào tôi có thể cung cấp định dạng PGN không?
Nếu không, làm cách nào tôi có thể chuyển đổi định dạng PGN thành FEN?
Có công cụ nào trong Python có thể giúp tôi không?

Câu trả lời:


6

Có những cách dễ dàng để làm điều này. Tôi sẽ trình bày ngắn gọn cho bạn một cách nhanh chóng để làm điều đó với python, sử dụng mô-đun python-Chess . Nếu các nhận xét trong mã là không đủ, vui lòng yêu cầu làm rõ hoặc các phần mở rộng có thể của mã:

Để giới thiệu một ví dụ hoạt động, tôi đã chơi một trò chơi giữa Adams và Kasparov , bạn có thể tải xuống PGN từ siêu liên kết. Và động cơ của chúng tôi là Stockfish mới nhất có sẵn được lấy từ trang web chính thức .

Hãy gọi nó là 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])

Hãy thử nghiệm nó với trò chơi PGN đã nói ở trên, lệnh của chúng tôi là:

python PGNeval.py adams_kasparov_2005.pgn

Và đây là đầu ra tôi nhận được:

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
Có cách nào tôi có thể đi qua bất kỳ nút nào của trò chơi (không chỉ nút cuối) không?
Janmejaya Nanda

2
vâng, chỉ cần lặp qua các nút, tôi đã thêm một cách để làm điều này trong chỉnh sửa.
Ellie

1
variationscung cấp cho bạn tất cả các nút con mà bạn đang gán lại gameđể duyệt qua cho đến khi kết thúc. Cảm ơn phonon đã giúp đỡ của bạn.
Janmejaya Nanda

3
Hân hạnh. Hãy vui vẻ chơi xung quanh với mô-đun này, nó được viết tốt.
Ellie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.