เอ็นจิ้นหมากรุก UCI เขียนด้วย Rust ผู้สืบทอดของ Proxima b, Proxima b 2.0 และ Cosette โปรเจ็กต์นี้เขียนขึ้นหลังเวลาผ่านไป โดยมีเป้าหมายเพื่อให้ได้ความแข็งแกร่งถึง 3,000 Elo สมบูรณ์แบบสำหรับการเป็นคู่ซ้อมสำหรับกลไกหมากรุกอื่น ๆ เนื่องจากมีการทดสอบอย่างหนักโดยใช้เกมที่รวดเร็วมาก รองรับฐานตาราง Syzygy, MultiPV, การไตร่ตรองและมัลติเธรด
ความแรงปัจจุบัน : 3000 Elo (01-11-2024)
เอกสารประกอบ : https://tearth.dev/Inanis/
เวอร์ชัน | วันที่วางจำหน่าย | เอโล่ | การเปลี่ยนแปลงหลัก |
---|---|---|---|
1.5.0 | 01-11-2024 | 3000 | หน้าต่างความทะเยอทะยาน ประสิทธิภาพที่ดีขึ้น และมัลติเธรด |
1.4.0 | 03-08-2024 | 2950 | ตรวจสอบส่วนขยาย, PST แบบสัมพันธ์, ฮิวริสติกแบบตอบโต้ |
1.3.0 | 14-06-2024 | 2900 | จูนเนอร์ไล่ระดับไล่ระดับ ปรับปรุง SEE และการประเมินผล |
1.2.1 | 04-09-2023 | 2850 | คำสั่งที่ดำเนินการโดยตรงจากบรรทัดคำสั่ง สมบูรณ์แบบในโหมด UCI |
1.2.0 | 15-01-2023 | 2850 | ปรับปรุงการสนับสนุน Syzygy ประสิทธิภาพทั่วไปและการปรับปรุงเสถียรภาพ |
1.1.1 | 14-08-2022 | 2800 | การแก้ไขมากมายสำหรับปัญหาที่รายงาน การปรับปรุงความเสถียร |
1.1.0 | 31-07-2022 | 2800 | ฐานตาราง Syzygy, MultiPV, การประเมินที่ปรับปรุงแล้ว |
1.0.1 | 05-04-2022 | 2750 | การแก้ไขมากมายสำหรับปัญหาที่รายงาน การปรับปรุงความเสถียร |
1.0.0 | 02-04-2022 | 2750 | การเปิดตัวครั้งแรก |
แต่ละรีลีสประกอบด้วยชุดไบนารีสำหรับแพลตฟอร์มต่างๆ: Linux (x86, x86-64, ARM, AArch64) และ Windows (x86, x86-64) ทั้ง Linux x86-64 และ Windows x86-64 ได้รับการคอมไพล์ด้วยชุดคำสั่งเพิ่มเติมสองชุด: POPCNT และ POPCNT + BMI1 + BMI2 - เพื่อให้ได้ประสิทธิภาพที่ดีที่สุด โปรดลองรันคำสั่ง benchmark
โดยใช้ตัวแปรของเอ็นจิ้นที่แตกต่างกัน และเลือกอันที่ ไม่ส่งคืนข้อผิดพลาดและมีคำแนะนำขั้นสูงสุด
ขอบคุณมากสำหรับผู้ทดสอบทุกคนและความพยายามของพวกเขา! โปรดทราบว่า Elo ในรายการด้านบนอาจแตกต่างจากการประมาณการของผู้เขียนเล็กน้อย เนื่องจากกลุ่มเครื่องยนต์ที่แตกต่างกันและการควบคุมเวลาที่ใช้สำหรับการทดสอบ
Inanis มีบัญชี lichess อย่างเป็นทางการ ซึ่งคุณสามารถลองท้าทายเครื่องยนต์ได้: https://lichess.org/@/InanisBot โปรดทราบว่าการให้คะแนนมีการประเมินต่ำเกินไปและไม่สามารถเทียบเคียงได้กับ CCRL ยอมรับหมากรุกมาตรฐานที่มีกระสุน สายฟ้าแลบ การควบคุมเวลาที่รวดเร็วและคลาสสิก
Hash
(ค่าเริ่มต้น: 2 MB) - ขนาดรวม (เป็นเมกะไบต์) สำหรับตารางการขนย้ายและแฮชจำนำMove Overhead
(ค่าเริ่มต้น: 10 ms) - ระยะเวลา (เป็นมิลลิวินาที) ที่ควรสงวนไว้ระหว่างการค้นหาความล่าช้าที่ไม่คาดคิด (เช่น ความล่าช้าของ GUI หรือความล่าช้าของเครือข่าย)MultiPV
(ค่าเริ่มต้น: 1 เส้น PV) - จำนวนเส้น PV ที่ควรแสดงระหว่างการค้นหาThreads
(ค่าเริ่มต้น: 1 เธรด) - จำนวนเธรดที่จะใช้ระหว่างการค้นหา (ควรน้อยกว่าจำนวนแกนประมวลผลเพื่อให้ได้ประสิทธิภาพที่ดีที่สุด)SyzygyPath
(ค่าเริ่มต้น: <empty>) - ตำแหน่งของฐานตาราง Syzygy เสริมSyzygyProbeLimit
(ค่าเริ่มต้น: 8 ชิ้น) - จำนวนชิ้นสูงสุดที่ควรดำเนินการโพรบ tablebaseSyzygyProbeDepth
(ค่าเริ่มต้น: 6) - ความลึกขั้นต่ำที่ควรดำเนินการโพรบ tablebasePonder
(ค่าเริ่มต้น: เท็จ) - อนุญาตให้เครื่องยนต์คิดในช่วงเวลาของคู่ต่อสู้Crash Files
(ค่าเริ่มต้น: false) - เมื่อเปิดใช้งาน จะบันทึกข้อความข้อขัดข้องในไดเร็กทอรี ./crash ตามค่าเริ่มต้น การเรียก cargo build
หรือ cargo build --release
จะสร้างกลไกโดยไม่รองรับฐานตาราง Syzygy (แต่ยังคงทำงานได้อย่างสมบูรณ์) หากต้องการรวม โปรดเพิ่ม --features syzygy,bindgen
และตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งเสียงดังกราวเมื่อทำงานบน Windows (MSVC ไม่รองรับองค์ประกอบ C11 บางอย่าง ดังนั้นจึงไม่สามารถใช้งานได้)
Inanis มีจูนเนอร์ในตัว ซึ่งช่วยให้สามารถปรับพารามิเตอร์การประเมินทั้งหมดให้เหมาะสมได้โดยใช้วิธีการปรับแต่งของ Texel ที่รู้จักกันดี เอาต์พุตจะมีไฟล์ต้นฉบับของ Rust ที่สร้างขึ้นในลักษณะที่ช่วยให้สามารถวางลงในซอร์สโค้ดของกลไกได้โดยตรง
ตัวอย่างไฟล์อินพุต:
r2qkr2/p1pp1ppp/1pn1pn2/2P5/3Pb3/2N1P3/PP3PPP/R1B1KB1R b KQq - c9 "0-1";
r4rk1/3bppb1/p3q1p1/1p1p3p/2pPn3/P1P1PN1P/1PB1QPPB/1R3RK1 b - - c9 "1/2-1/2";
4Q3/8/8/8/6k1/4K2p/3N4/5q2 b - - c9 "0-1";
r4rk1/1Qpbq1bp/p1n2np1/3p1p2/3P1P2/P1NBPN1P/1P1B2P1/R4RK1 b - - c9 "0-1";
ตัวอย่างการรันจูนเนอร์:
tuner ./input/quiet.epd ./output/ true 0.007 0.75 1
- รันการปรับจูนแบบเธรดเดียวสำหรับตำแหน่งที่เก็บไว้ใน quiet.epd
เริ่มต้นจากค่าสุ่มโดยมีค่าคงที่สเกล 0.007 อัตราส่วน WDL 0.75 และบันทึกผลลัพธ์ใน ไดเร็กทอรี output
tuner ./input/quiet.epd ./output/ false None 1.0 4
- รันการปรับแต่งด้วย 4 เธรดสำหรับตำแหน่งที่เก็บไว้ใน quiet.epd
เริ่มต้นจากค่าที่ตั้งไว้แล้วในเครื่องยนต์ โดยกำหนดค่าคงที่สเกลก่อนการปรับ อัตราส่วน WDL 1.0 และบันทึกผลลัพธ์ลงในไดเร็กทอรี output
ตั้งแต่เวอร์ชัน 1.1.0 Inanis ยังมีคำสั่งในการสร้างไฟล์ epd ที่มีตำแหน่งเงียบ โดยอิงตามอินพุต PGN ที่ให้มา:
dataset ./input/games.pgn ./output/quiet.epd 16 250 50 3 0.5
- สร้างไฟล์ quiet.epd
ใหม่โดยการแยกวิเคราะห์ games.pgn
และสุ่มตำแหน่ง 3 ตำแหน่งจากแต่ละเกม โดยไม่สนใจสิ่งเหล่านี้ด้วยชั้น น้อยกว่า 16 คะแนน คะแนนการประเมินมากกว่า 250 และความแตกต่างระหว่างคะแนนการประเมินและคะแนนการค้นหาความสงบมากกว่า 50 เกมโดยเฉลี่ย เฟส 0.5 หมายความว่าตำแหน่งจะสมดุล (> 0.5 = ใกล้เปิด, < 0.5 = ใกล้สิ้นสุด) การทดสอบประสิทธิภาพการประเมินเชิงกลยุทธ์สามารถทำได้โดยใช้คำสั่ง test
ซึ่งดำเนินการค้นหาตำแหน่งที่จัดเก็บไว้ในไฟล์ EPD ในเชิงลึกคงที่
ตัวอย่างไฟล์ชุดทดสอบ:
1k2r2r/1bq2p2/pn4p1/3pP3/pbpN1P1p/4QN1B/1P4PP/2RR3K b - - bm Nd7; c0 "Nd7=10, Bc5=8, Bc6=2, Be7=7"; id "STS: Knight Outposts/Repositioning/Centralization.001";
1q2bn2/6pk/2p1pr1p/2Q2p1P/1PP5/5N2/5PP1/4RBK1 w - - bm Ne5; c0 "Ne5=10, Nd4=8, Ra1=6, b5=9"; id "STS: Knight Outposts/Repositioning/Centralization.002";
1r1q1rk1/1b1n1p1p/p2b1np1/3pN3/3P1P2/P1N5/3BB1PP/1R1Q1RK1 b - - bm Ne4; c0 "Ne4=10, Bxa3=6, Nb6=6"; id "STS: Knight Outposts/Repositioning/Centralization.003";
1k2r2r/1bq2p2/pn4p1/3pP3/pbpN1P1p/4QN1B/1P4PP/2RR3K b - - bm Nd7; c0 "Nd7=10, Bc5=8, Bc6=2, Be7=7"; id "STS: Knight Outposts/Repositioning/Centralization.001";
1q2bn2/6pk/2p1pr1p/2Q2p1P/1PP5/5N2/5PP1/4RBK1 w - - bm Ne5; c0 "Ne5=10, Nd4=8, Ra1=6, b5=9"; id "STS: Knight Outposts/Repositioning/Centralization.002";
1r1q1rk1/1b1n1p1p/p2b1np1/3pN3/3P1P2/P1N5/3BB1PP/1R1Q1RK1 b - - bm Ne4; c0 "Ne4=10, Bxa3=6, Nb6=6"; id "STS: Knight Outposts/Repositioning/Centralization.003";
ตัวอย่างการดำเนินการทดสอบ:
testset ./input/STS1.epd 16 64 4
- เรียกใช้ความลึกคงที่ (16 ในกรณีนี้) ค้นหาตำแหน่งทั้งหมดที่เก็บไว้ในไฟล์ STS1.epd
โดยใช้ตารางการขนย้าย 64 MB และ 4 เธรด หากต้องการจัดประเภทการทดสอบว่าสำเร็จ การวนซ้ำครั้งล่าสุดจะต้องส่งคืนการเคลื่อนไหวที่ดีที่สุดที่ถูกต้อง สร้างการพึ่งพา
การพึ่งพาการพัฒนา
ห้องสมุดภายนอก
เนื่องจาก Inanis เป็นโปรเจ็กต์สำหรับสัตว์เลี้ยง จึงยังไม่ยอมรับคำขอดึงในปัจจุบัน ซึ่งอาจมีหรือไม่มีการเปลี่ยนแปลงในอนาคต ขึ้นอยู่กับแนวทางดำเนินโครงการ อย่างไรก็ตาม โปรดอย่าลังเลที่จะให้ประเด็นหรือข้อเสนอแนะใดๆ แก่พวกเขา เราจะยินดีเป็นอย่างยิ่ง
คำสั่งทั้งหมดที่แสดงด้านล่างสามารถดำเนินการได้ทั้งในโหมดโต้ตอบและโดยตรงจากบรรทัดคำสั่ง ในตัวอย่าง inanis.exe perft 5
รายการที่ทำเครื่องหมายด้วย [DEV] จะใช้ได้เฉพาะเมื่อมีการคอมไพล์เอ็นจิ้นด้วยคุณสมบัติ dev
เท่านั้น
=== General ===
benchmark - run test for a set of positions
evaluate [fen] - show score for the position
uci - run Universal Chess Interface
quit - close the application
=== Development ===
[DEV] dataset [pgn] [output] [min_ply] [max_score] [max_diff] [density] - dataset generator
[DEV] magic - generate magic numbers
[DEV] testset [epd] [depth] [ttable_size] [threads_count] - run test of positions
[DEV] tuner [epd] [output] [randomize] [k] [wdl_ratio] [threads_count] - run tuning
=== Perft ===
perft [depth]
perft [depth] fen [fen]
perft [depth] moves [moves]
=== Divided Perft ===
dperft [depth]
dperft [depth] fen [fen]
dperft [depth] moves [moves]
=== Quick Perft ===
qperft [depth] [threads_count] [hashtable_size_mb]
qperft [depth] [threads_count] [hashtable_size_mb] fen [fen]
qperft [depth] [threads_count] [hashtable_size_mb] moves [moves]