Công cụ cờ vua với API


11

Tôi đang tìm kiếm một công cụ cờ vua cung cấp API bình thường mà tôi có thể sử dụng với một số ngôn ngữ lập trình cấp cao như C # hoặc python. Tôi đã xem qua danh sách các nhà lãnh đạo (Houdini, Komodo, Stockfish và Rybka) và không thể tìm thấy bất kỳ dấu hiệu nào cho thấy các công cụ này cung cấp API (điều này làm tôi ngạc nhiên và cho rằng tôi đang thiếu thứ gì đó).

Để bớt mơ hồ, đây là những gì tôi cần từ API này:

  • có thể tải trò chơi cụ thể vào công cụ
  • có thể đánh giá vị trí của trò chơi
  • có thể di chuyển

Vì vậy, có ai biết một công cụ cung cấp API rõ ràng cho các chức năng của nó không?


2
UCI là một API nhận lệnh thông qua các chuyển đổi dòng lệnh và đầu vào tiêu chuẩn. Bạn có thể viết một trình bao bọc xung quanh các lệnh đó và gọi các lệnh bằng các hàm.
masoud

Vâng, UCI chính xác là những gì bạn đang tìm kiếm. Tất cả các chương trình đó đều hỗ trợ UCI, đó là cách chúng được tích hợp vào các chương trình như ChessBase.
dfan

Câu trả lời:


6

Như những người khác đã nói, UCI là API bạn muốn. Thông số kỹ thuật đầy đủ của giao thức có tại đây (tệp zip trích xuất thành tệp văn bản): http://doad.shredderchess.com/div/uci.zip

Nó thực sự rất đơn giản và đơn giản, một công cụ UCI phải trả lời và trả lời bằng văn bản đơn giản thông qua stdin, stdout và stderr. Trong thực tế, bạn sẽ có thể khởi chạy nhị phân thực thi của bất kỳ công cụ UCI nào trên nền tảng của bạn và phát hành các lệnh UCI theo cách thủ công.

UCI tạo điều kiện cho các hướng dẫn từ GUI hoặc công cụ khác yêu cầu công cụ cụ thể làm bất cứ điều gì bạn muốn làm, bao gồm phân tích một tệp PGN cụ thể (việc tải nó thông qua GUI hoặc giao diện người dùng tương tự, các bước di chuyển thô sau đó được đưa vào động cơ ở dạng đại số mở rộng, chẳng hạn như e4 trở thành e2e4). Điểm thứ hai và thứ ba trong các yêu cầu của bạn là tiêu chuẩn với UCI, nhưng tùy thuộc vào mỗi nhà phát triển động cơ để hỗ trợ họ (do các yêu cầu đó nghiêng như thế nào, nên là hầu hết trong số đó).

Đây là một ví dụ về UCI hoạt động trên dòng lệnh:

bash-3.2$ ./stockfish-5-64 
Stockfish 5 64 by Tord Romstad, Marco Costalba and Joona Kiiski
uci
id name Stockfish 5 64
id author Tord Romstad, Marco Costalba and Joona Kiiski

option name Write Debug Log type check default false
option name Write Search Log type check default false
option name Search Log Filename type string default SearchLog.txt
option name Book File type string default book.bin
option name Best Book Move type check default false
option name Contempt Factor type spin default 0 min -50 max 50
option name Mobility (Midgame) type spin default 100 min 0 max 200
option name Mobility (Endgame) type spin default 100 min 0 max 200
option name Pawn Structure (Midgame) type spin default 100 min 0 max 200
option name Pawn Structure (Endgame) type spin default 100 min 0 max 200
option name Passed Pawns (Midgame) type spin default 100 min 0 max 200
option name Passed Pawns (Endgame) type spin default 100 min 0 max 200
option name Space type spin default 100 min 0 max 200
option name Aggressiveness type spin default 100 min 0 max 200
option name Cowardice type spin default 100 min 0 max 200
option name Min Split Depth type spin default 0 min 0 max 12
option name Threads type spin default 1 min 1 max 128
option name Hash type spin default 32 min 1 max 16384
option name Clear Hash type button
option name Ponder type check default true
option name OwnBook type check default false
option name MultiPV type spin default 1 min 1 max 500
option name Skill Level type spin default 20 min 0 max 20
option name Emergency Move Horizon type spin default 40 min 0 max 50
option name Emergency Base Time type spin default 60 min 0 max 30000
option name Emergency Move Time type spin default 30 min 0 max 5000
option name Minimum Thinking Time type spin default 20 min 0 max 5000
option name Slow Mover type spin default 80 min 10 max 1000
option name UCI_Chess960 type check default false
uciok
isready
readyok
quit
bash-3.2$ 

Các lệnh tôi đã ban hành là uci, đã sẵn sàng và thoát.

Để sử dụng các lệnh UCI, về cơ bản bạn có hai lựa chọn chính; bạn có thể sử dụng giao diện hiện có (ví dụ: ChessX, Arena và một loạt các giao diện khác) hoặc bạn có thể viết mã của riêng mình để đưa ra hướng dẫn cho động cơ hoặc nhóm động cơ. Tôi tin rằng có thể đã có các trình bao bọc Python để truy cập các công cụ UCI, nhưng tôi cần kiểm tra lại. Chắc chắn có python-Chess (cờ nhập khẩu) và pychess (nhập khẩu pychess), tôi chỉ không thể nhớ lại phạm vi chức năng của chúng. Tôi không thể nhớ nơi pychess đang ẩn nấp (có thể là mã github hoặc google), nhưng python-Chess có thể được cài đặt bằng pip.


UCI dường như không cung cấp API để đặt giá trị của các mảnh.
Snowcrash

Đó là thứ nên được lập trình vào chính động cơ và động cơ cờ vua sẽ sử dụng các giá trị tiêu chuẩn. Bạn chỉ cần thay đổi nó cho một số trò chơi khác (ví dụ: cờ vua kỳ lạ) và rất có thể bạn sẽ cần thực hiện nhiều thay đổi hơn là chỉ các giá trị quân cờ sau đó.
Ben

Tôi không đồng ý. Không có standardgiá trị.
Snowcrash

Sau đó, có lẽ bạn cần phải rẽ nhánh một cơ sở mã động cơ để thiết kế lại nó với các giá trị thay thế. Sau đó, thiết lập một cấu hình riêng cho công cụ rẽ nhánh và biên dịch lại để sử dụng các giá trị mới. Sau đó tiếp tục tương tác qua UCI như bình thường. Ngoài ra, nhìn vào định dạng ngôn ngữ động cơ khác mà GNU Chess sử dụng, tôi quên các chi tiết về nó.
Bến

3

Tôi đã tìm hiểu về "api engine cờ vua" nhưng chưa thấy bất kỳ API thực sự nào. Như được đề xuất trong các ý kiến ​​của câu hỏi của bạn, tôi sẽ đi với UCI. Đây cũng là cách giao tiếp của GUI với các công cụ cờ vua.

Nếu bạn thực sự là một lập trình viên khó tính, bạn luôn có thể kiểm tra Stockfish nguồn mở. Rất có thể có một số loại API được xây dựng trong đó hoặc bạn có thể tạo một bản sao và xây dựng API của riêng bạn cho nó.

http://stockfishchess.org/


1
API để nói chuyện với Stockfish cũng là UCI.
dfan

1
Quả thực là như vậy. Nhưng sử dụng UCI hoặc đi sâu vào mã sẽ phụ thuộc vào cách động cơ sẽ được sử dụng và không phải để làm gì. Câu hỏi không rõ ràng về điều đó.
Rafiek

Tôi nghĩ rằng tôi đã đề cập chính xác những gì tôi cần làm với động cơ. Tải một PNG cụ thể và đánh giá sau mỗi lần di chuyển.
Salvador Dali

Nó là hoàn toàn rõ ràng những gì bạn muốn làm với động cơ. Làm thế nào bạn sẽ được sử dụng nó được để lại trong mở. Trong cài đặt nào bạn sẽ sử dụng động cơ? Có thể UCI có thể không phải là cách tối ưu để giao tiếp với động cơ. Tôi đề nghị một lựa chọn khác nếu UCI không đủ cho bạn.
Rafiek

Xin lỗi, nhưng tôi không thể hiểu ý bạn là gì khi tôi sử dụng động cơ. Bạn có thể vui lòng làm rõ điều này?
Salvador Dali


1

Batch First là một công cụ cờ được biên dịch JIT được viết bằng Python, được biên dịch bằng Numba, cho phép giao tiếp C ++ dễ dàng và giao tiếp Python dễ dàng hơn.

Mặc dù bản thân Batch First là một công cụ không phải API, nhưng nó sử dụng rất nhiều và dựa vào gói Python-Chess , đây là một API tuyệt vời.

Việc biên dịch JIT của Batch First và sử dụng các mảng NumPy để biểu diễn các bảng, cho phép giao diện Python thực tế hơn (ít nhất là một độ lớn nhanh hơn) để sử dụng thực tế trong một công cụ cờ vua.

Cốt lõi của công cụ là thuật toán tìm kiếm k-best-first đầu tiên được sử dụng để đánh giá ANN theo lô.

Tiết lộ đầy đủ, tôi là tác giả của động cơ Batch First.


-1

Ở đây có phiên bản cổng của Stockfish trong .Net: https://github.com/bpfliegel/Portfish

Để sử dụng công cụ này (một khi được biên dịch), bạn sẽ sử dụng GUI như Arena http://wwww.playwitharena.com hoặc ScidVSPC http://scidvspc.sourceforge.net . Các ứng dụng này được sử dụng để cung cấp giao diện đẹp và cho phép bạn tải trò chơi / vị trí, phân tích chúng (Tôi khá chắc chắn rằng bạn có thể tải trò chơi trên pgn và phân tích nó bằng một công cụ với các tiêu chí như "n giây mỗi lần di chuyển" hoặc " n plies mỗi lần di chuyển "), chạy các trận đấu giữa các động cơ, v.v.

Trong (hầu hết) mọi công cụ cờ vua, bạn sẽ tìm thấy một cái gì đó như tệp uci.cs hoặc xboard.cs được cam kết cho nhiệm vụ liên lạc này.

("Công cụ cờ vua" là một chương trình có khả năng chơi cờ nhưng không có giao diện đồ họa. Cách thức giao tiếp với các ứng dụng như Arena hoặc ScidVSPC là bởi các giao thức UCI hoặc xboard. nhà phát triển có thể quên đi nội dung GUI và tập trung vào "bộ não").

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.