เอ็นจิ้นหมากรุกด้วย API


11

ฉันกำลังมองหาโปรแกรมหมากรุกที่มี API ปกติซึ่งฉันสามารถใช้กับภาษาการเขียนโปรแกรมระดับสูงเช่น C # หรือ python ฉันผ่านรายชื่อผู้นำ (Houdini, Komodo, Stockfish และ Rybka) และไม่พบสัญญาณใด ๆ ที่เอ็นจิ้นเหล่านี้มี API (ซึ่งทำให้ฉันประหลาดใจและแนะนำว่าฉันขาดอะไรไป)

เพื่อให้คลุมเครือน้อยลงนี่คือสิ่งที่ฉันต้องการจาก API นี้:

  • สามารถโหลดเกมเฉพาะลงในเอ็นจิ้นได้
  • สามารถประเมินตำแหน่งของเกมได้
  • สามารถเคลื่อนไหวได้

ดังนั้นใครจะรู้ว่าเครื่องยนต์ที่มีฟังก์ชั่น API ที่ชัดเจนให้กับมันหรือไม่?


2
UCI เป็น API ที่ได้รับคำสั่งผ่านสวิตช์บรรทัดคำสั่งและอินพุตมาตรฐาน คุณสามารถเขียนเสื้อคลุมรอบคำสั่งเหล่านั้นและคำสั่งโทรโดยฟังก์ชั่น
masoud

ใช่ UCI เป็นสิ่งที่คุณต้องการอย่างแน่นอน โปรแกรมทั้งหมดเหล่านั้นรองรับ UCI ซึ่งเป็นวิธีรวมเข้ากับโปรแกรมเช่น ChessBase
dfan

คำตอบ:


6

อย่างที่คนอื่นพูดกัน UCI เป็น API ที่คุณต้องการ ข้อมูลจำเพาะทั้งหมดของโปรโตคอลอยู่ที่นี่ (ไฟล์ซิปแยกไปยังไฟล์ข้อความ): http://download.shredderchess.com/div/uci.zip

จริงๆแล้วมันตรงไปตรงมาและเรียบง่ายเอ็นจิ้น UCI ต้องตอบและตอบกลับเป็นข้อความธรรมดาผ่าน stdin, stdout และ stderr ในความเป็นจริงคุณควรจะสามารถเปิดใช้งานไบนารีที่ปฏิบัติการได้ของโปรแกรม UCI ใด ๆ บนแพลตฟอร์มของคุณและออกคำสั่ง UCI ด้วยตนเอง

UCI อำนวยความสะดวกให้คำแนะนำจาก GUI หรือเอ็นจินอื่น ๆ เพื่อบอกเอ็นจินเฉพาะให้ทำทุกอย่างที่คุณต้องการให้ทำรวมถึงวิเคราะห์ไฟล์ PGN ที่เฉพาะเจาะจง (การโหลดมันผ่าน GUI หรือ front-end ที่คล้ายกัน จะถูกป้อนไปยังเครื่องยนต์ในรูปแบบพีชคณิตแบบขยายเช่น e4 กลายเป็น e2e4) จุดที่สองและสามของความต้องการของคุณนั้นเป็นมาตรฐานของ UCI แต่ขึ้นอยู่กับนักพัฒนาเครื่องยนต์แต่ละคนที่จะสนับสนุนพวกเขา (เนื่องจากความต้องการเหล่านั้นน้อยลง

นี่คือตัวอย่างของการดำเนินการ UCI ในบรรทัดคำสั่ง:

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$ 

คำสั่งที่ฉันใช้คือ uci, isready และออกจาก

ในการใช้ประโยชน์จากคำสั่ง UCI คุณต้องมีสองตัวเลือกหลัก คุณสามารถใช้อินเทอร์เฟซที่มีอยู่ (เช่น ChessX, Arena และโฮสต์ของผู้อื่น) หรือคุณสามารถเขียนรหัสของคุณเองเพื่อออกคำแนะนำไปยังเอ็นจิ้นหรือกลุ่มของเอ็นจิ้น ฉันเชื่อว่าอาจมีตัวห่องูเหลือมอยู่แล้วในการเข้าถึงเครื่องมือ UCI แต่ฉันต้องตรวจสอบอีกครั้ง มี python-Chess แน่นอน (import หมากรุก) และ pychess (import pychess) ฉันไม่สามารถจำขอบเขตหน้าที่ของพวกเขาได้ ฉันจำไม่ได้ว่าที่ pychess ซ่อนอยู่ (อาจเป็น github หรือ google code) แต่ python-Chess สามารถติดตั้งได้ด้วย pip


ดูเหมือนว่า UCI จะไม่ให้ API สำหรับการตั้งค่าชิ้น
Snowcrash

สิ่งนั้นควรจะถูกตั้งโปรแกรมไว้ในเอ็นจิ้นเองและเอ็นจิ้นหมากรุกจะใช้ค่ามาตรฐาน คุณจะต้องเปลี่ยนมันสำหรับเกมอื่น ๆ (เช่นหมากรุกเทวดา) และโอกาสที่คุณจะต้องทำการเปลี่ยนแปลงมากขึ้นกว่าค่าชิ้นส่วนเท่านั้น
Ben

ฉันไม่เห็นด้วย. ไม่มีstandardค่า
Snowcrash

จากนั้นคุณอาจต้องแยกรหัสเครื่องยนต์เพื่อออกแบบใหม่ด้วยค่าตัวแปรแทน จากนั้นตั้งค่าการแยกต่างหากสำหรับเอ็นจิ้นแยกและคอมไพล์ใหม่เพื่อใช้ค่าใหม่ จากนั้นให้ดำเนินการต่อผ่าน UCI ตามปกติ หรือดูที่รูปแบบภาษาเอ็นจินอื่น ๆ ที่ GNU Chess ใช้ แต่ฉันลืมรายละเอียดของมัน
Ben

3

ฉัน googled ใน "Chess engine api" แต่ไม่เห็น API ของจริง ตามที่แนะนำในความคิดเห็นของคำถามของคุณฉันจะไปกับ UCI นี่เป็นวิธีที่ GUI สื่อสารกับเอ็นจิ้นหมากรุก

หากคุณเป็นโปรแกรมเมอร์ที่ไม่ยอมใครง่ายๆจริงๆคุณสามารถลองดูโปรแกรมโอเพ่นซอร์ส Stockfish ได้ตลอดเวลา อาจเป็นไปได้ว่ามี API บางประเภทที่สร้างขึ้นภายในหรือคุณสามารถสร้างโคลนและสร้าง API ของคุณเองได้

http://stockfishchess.org/


1
API สำหรับการพูดคุยกับ Stockfish นั้นก็คือ UCI
dfan

1
แน่นอนมันคือ แต่การใช้ UCI หรือดำน้ำในรหัสจะขึ้นอยู่กับว่าเครื่องยนต์จะใช้งานอย่างไร คำถามไม่ชัดเจน
Rafiek

ฉันคิดว่าฉันพูดถึงสิ่งที่ฉันต้องทำกับเครื่องยนต์ โหลด PNG ที่เฉพาะเจาะจงและประเมินผลหลังจากการย้ายแต่ละครั้ง
Salvador Dali

ชัดเจนว่าคุณต้องการทำอะไรกับเครื่องยนต์ วิธีที่คุณจะใช้มันจะถูกปล่อยทิ้งไว้ในที่โล่ง คุณจะใช้เครื่องยนต์ในการตั้งค่าแบบใด อาจเป็นไปได้ว่า UCI อาจไม่ใช่วิธีที่ดีที่สุดในการสื่อสารกับเครื่องยนต์ ฉันแนะนำตัวเลือกอื่นหาก UCI ไม่เพียงพอสำหรับคุณ
Rafiek

ขออภัยฉันไม่สามารถเข้าใจสิ่งที่คุณหมายถึงโดยวิธีการที่ฉันจะใช้เครื่องยนต์ คุณช่วยอธิบายให้ฟังหน่อยได้ไหม?
Salvador Dali


1

Batch Firstเป็นเอ็นจิ้นหมากรุกคอมไพล์ของ JIT ที่เขียนด้วย Python รวบรวมโดยใช้ Numba ซึ่งจะช่วยให้สามารถเชื่อมต่อ C ++ ได้ง่ายและเชื่อมต่อ Python ได้ง่ายยิ่งขึ้น

ในขณะที่แบทช์เฟิร์สเองนั้นเป็นเอ็นจิ้นที่ไม่ใช่ API แต่ก็มีการใช้และพึ่งพาแพคเกจPython-Chess เป็นอย่างมากซึ่งเป็น API ที่ยอดเยี่ยม

การรวบรวม JIT ของ Batch First และการใช้ NumPy arrays สำหรับใช้แทนบอร์ดช่วยให้สามารถใช้งาน Python interface ได้อย่างรวดเร็ว (อย่างน้อยก็ลำดับความสำคัญเร็วกว่า) สำหรับการใช้งานจริงในหมากรุก

แกนหลักของเครื่องยนต์คืออัลกอริธึมการค้นหา k-best-first-zero-window ที่ใช้ในการประเมิน ANN ในรูปแบตช์

การเปิดเผยอย่างสมบูรณ์ฉันเป็นผู้สร้างเอ็นจิ้น Batch First


-1

ที่นี่มีรุ่นพอร์ตของ Stockfish ใน. Net: https://github.com/bpfliegel/Portfish

การใช้เครื่องมือนี้ (เมื่อมีการรวบรวม) คุณจะ Nedd GUI ที่เช่นสนามกีฬาhttp://wwww.playwitharena.comหรือ ScidVSPC http://scidvspc.sourceforge.net แอปพลิเคชันเหล่านี้ใช้เพื่อจัดเตรียมส่วนต่อประสานที่ดีและอนุญาตให้คุณโหลดเกม / ตำแหน่งวิเคราะห์พวกเขา (ฉันค่อนข้างแน่ใจว่าคุณสามารถโหลดเกมบน pgn และวิเคราะห์โดยเครื่องมือที่มีเกณฑ์เช่น "n วินาทีต่อการเคลื่อนไหว" หรือ " n plies ต่อการเคลื่อนไหว "), เรียกใช้การจับคู่ระหว่างเครื่องยนต์, ฯลฯ

ใน (เกือบ) เอ็นจิ้นหมากรุกทุกตัวคุณควรหาไฟล์เช่น uci.cs หรือไฟล์ xboard.cs ที่กำหนดให้กับงานสื่อสารนี้

("เครื่องมือหมากรุก" เป็นโปรแกรมที่สามารถเล่นหมากรุก แต่ไม่มีส่วนต่อประสานกราฟิกวิธีการสื่อสารกับแอปพลิเคชั่นเช่น Arena หรือ ScidVSPC เป็นโปรโตคอล UCI หรือ xboard โปรแกรมหมากรุกส่วนใหญ่เขียนด้วยวิธีนี้ดังนั้น นักพัฒนาสามารถลืมเกี่ยวกับสิ่ง GUI และมุ่งเน้นไปที่ "สมอง")

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.