- เป็น เอนจินหมากรุกขนาดเบา ที่ทำงานได้ในขนาดเพียงประมาณ 2KB และสามารถเล่นเกมได้ครบถ้วนภายใต้กติกาที่จำกัด
- มีอัลกอริทึมหลักอย่าง กระดานแบบ mailbox 120 ช่อง, การค้นหาแบบ Negamax, และ การตัดกิ่งแบบ Alpha-Beta
- ใช้การประเมินแบบ อิงมูลค่าตัวหมาก(material-only eval) และวิธี จัดลำดับตาเดินโดยให้การกินมาก่อน(move ordering)
- ฟีเจอร์อย่าง castling, en passant, promotion, repetition และกฎ 50 ตา ยัง ไม่ได้ถูกนำมาใช้
- มีประสิทธิภาพราว 1170~1200 Elo และถูกจับตามองในฐานะ ตัวอย่างการสร้างเอนจินหมากรุกด้วยโค้ดต่ำกว่า 2KB
ภาพรวมโปรเจกต์
- Sameshi คือ เอนจินหมากรุกขนาดจิ๋วที่รองรับกติกาแบบจำกัด โดยมีขนาดโค้ดรวมเพียงประมาณ 1.95KB เท่านั้น
- ไฟล์หลักคือ
sameshi.h และเวอร์ชันที่อ่านง่ายอยู่ใน readable/sameshi.h
- ใน GitHub repository ยังมี
main.c, Makefile, .gitignore และไฟล์อื่น ๆ มาด้วย
- มีการเผยแพร่ วิดีโอเดโม บน YouTube ทำให้สามารถดูการทำงานจริงได้
โครงสร้างหลัก (core)
- เอนจินประกอบด้วยองค์ประกอบหลัก 6 ส่วนดังนี้
- โครงสร้างกระดานแบบ mailbox 120 ช่อง
- อัลกอริทึมการค้นหาแบบ Negamax
- การตัดกิ่งแบบ Alpha-Beta
- การประเมินแบบอิงมูลค่าตัวหมาก(material-only evaluation)
- การจัดลำดับตาเดินโดยให้การกินมาก่อน(move ordering)
- การตรวจสอบความถูกต้องของตาเดินตามกติกาอย่างครบถ้วน รวมถึง check, checkmate และ stalemate
- ฟังก์ชันที่ ยังไม่ได้ถูกนำมาใช้ ระบุไว้ชัดเจนว่าได้แก่ castling, en passant, promotion, repetition และกฎ 50 ตา
ประสิทธิภาพ (strength)
- ถูกประเมินว่าอยู่ที่ประมาณ 1170 Elo โดยมี ช่วงความเชื่อมั่น 95% อยู่ที่ 1110~1225 Elo
- วัดจากผลการแข่งขัน 240 เกมกับ Stockfish (ระดับ 1320~1600)
- ทดสอบภายใต้เงื่อนไข ความลึก 5 (fixed depth 5), สูงสุด 60 ply และ กติกาแบบจำกัด
คุณลักษณะทางเทคนิค
- โค้ดทั้งหมดมีขนาด ต่ำกว่า 2KB ประกอบด้วย ภาษา C 98.6% และ Makefile 1.4%
- เน้น การทำให้เบาที่สุดและประสิทธิภาพของอัลกอริทึม เพื่อสร้างตรรกะหมากรุกด้วยโค้ดให้น้อยที่สุด
- ถูกจัดอยู่ในหัวข้อ chess-engine, chess และ demoscene
สถานะของ repository
- บน GitHub มี 143 stars และ 5 forks
- หมวด Issues, Pull requests, Projects และ Security ยังว่างทั้งหมด
- คำอธิบายของ repository สรุปไว้ว่า “a ~1200 Elo chess engine that fits within 2KB”
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เป็นโปรเจ็กต์ที่เจ๋งมาก ชอบที่มีฟังก์ชัน stalemate ด้วย แต่ก็สงสัยว่าถ้าจะใส่กติกาครบทั้งหมดจะต้องใช้พื้นที่เพิ่มอีกเท่าไร
อย่างที่ผู้เขียนบอกไว้ ถ้าขาด castling, en passant, promotion, repetition และกฎ 50 เดิน ก็คงเรียกว่าหมากรุกสมัยใหม่ได้ไม่เต็มปาก
ถ้าเป็นเอนจินขนาดเล็กมาก อาจตัด repetition กับกฎ 50 เดินออกได้ แต่ castling, en passant และ promotion น่าจะเป็นของจำเป็น
Video Chess ในปี 1980 รองรับกติกาครบทั้งหมดได้ภายใน 4KB
เลยอยากรู้ว่า เอนจินที่รองรับ UCI ซึ่งเล็กที่สุดในตอนนี้คืออะไร การพยายามทำเอนจินกติกาครบแบบจิ๋วที่เอาชนะสถิตินั้นน่าจะเป็นเป้าหมายที่สนุกดี
อ้างอิงไว้ด้วยว่า Fidelity CC3 ที่ฉันเคยใช้ช่วงต้นยุค 1980 ก็รองรับ castling และ en passant
เวอร์ชัน JavaScript ขนาด 2KB มีทั้ง castling, en passant, promotion, การค้นหา และ GUI
ส่วนเวอร์ชันแอสเซมบลีขนาด 326 ไบต์ไม่มีกฎพิเศษ
ยังไม่มีเวอร์ชันที่รองรับ UCI แต่ก็น่าจะทำง่ายกว่า GUI และเป็นไปได้ว่าฟอร์กบางตัวของเวอร์ชัน JS อาจเพิ่มความสามารถนั้นไว้แล้ว
เป็นโปรเจ็กต์ที่เท่มาก ดูเหมือนว่าสามารถใช้ ฟรอนต์เอนด์ของ GNU Chess เพื่อลดจำนวนบรรทัดโค้ด แล้วทำเฉพาะแบ็กเอนด์ก็ได้
รายงานบั๊กอย่างหนึ่งคือ หลังจากเบี้ยเดินไปแล้วหนึ่งช่อง มันไม่ควรจะเดินสองช่องได้อีก แต่กลับอนุญาต
b6b4เครื่องมือที่นักพัฒนาเอนจินหมากรุกใช้บ่อยที่สุดในการ ประเมินค่า ELO คือ cutechess โดยภายในใช้ SPRT
อีกเครื่องมือหนึ่งคือ Ordo แต่ฉันยังไม่เคยใช้เอง
สงสัยว่าจะทำได้ไหมถ้าให้ได้ 1 ELO ต่อ 1 ไบต์ อาจทำให้เล็กลงได้อีก แต่ก็น่าจะฉลาดน้อยลง
นี่ใกล้เคียงกับการเป็น โปรแกรมที่ขยับตัวหมากได้ มากกว่าจะเป็นหมากรุก เพราะขาด castling, en passant, promotion, repetition และกฎ 50 เดิน
บ่อยครั้งมีการอ้างว่าทำหมากรุกได้ในขนาดที่เล็กมาก แต่จริง ๆ แล้วตัดกฎสำคัญออกไป
ถ้าต้องการเอนจินที่เล็กและแข็งแรงจริง ๆ แนะนำ asmFish (ประมาณ 130KiB) ที่เขียนด้วยแอสเซมบลี x86, OliThink ที่มีราว 1000 บรรทัด และ Xiphos ที่ใช้โค้ด C เรียบง่ายแต่ให้ประสิทธิภาพสูง
ยังมีเอนจิน 4KB ที่เคยไปแข่งใน TCEC ด้วย แต่ผมคิดว่าคำกล่าวอ้างเหล่านั้นควรมีเครื่องหมายดอกจัน (*) กำกับไว้
Toledo เป็นตระกูล โปรแกรมหมากรุกขนาดเล็กแต่ค่อนข้างแข็งแกร่ง
ไม่นานมานี้ฉันก็เพิ่งทำ เอนจินหมากรุกที่มีกติกาครบทั้งหมด ด้วยโค้ดที่อ่านง่ายประมาณ 400 บรรทัด
ตอนแรกทำด้วย Java แล้วค่อยพอร์ตไปยังภาษา Bau ที่ฉันสร้างเอง
มีทั้งเทอร์มินัล UI ด้วย ตอนนี้ยังวัด ELO อยู่ แต่ฉันยังเอาชนะมันไม่ได้
โดยเฉพาะการทำ castling ค่อนข้าง tricky แต่ตัวความท้าทายเองก็สนุกมาก
ดูได้ที่ โค้ดหมากรุกของภาษา Bau
สงสัยว่าเกมที่ Stockfish ต้องการทำ castling ถูกจัดการอย่างไร เพราะมันเป็นเดินที่เกิดขึ้นบ่อยมาก ถ้าไม่รองรับก็น่าจะประเมินความแข็งแกร่งของเอนจินได้ยาก
ดังนั้นทุกเกมจึงเล่นภายใต้ “หมากรุกแบบไม่ให้ castling” เหมือนกันทั้งหมด
การประเมินนี้จึงไม่ใช่สำหรับหมากรุกเต็มรูปแบบ แต่เป็นสำหรับหมากรุกดัดแปลงแบบจำกัดนั้น
เจ๋งมาก! ฉันเพิ่มโปรเจ็กต์นี้เข้าไปใน HN Arcade แล้ว
ลิงก์ HN Arcade