- Là một động cơ cờ vua gọn nhẹ hoạt động trong kích thước khoảng 2KB, có thể chơi trọn vẹn một ván trong phạm vi các luật bị giới hạn
- Bao gồm các thuật toán cốt lõi như bàn cờ mailbox 120 ô, tìm kiếm Negamax, cắt tỉa Alpha-Beta
- Sử dụng đánh giá dựa trên giá trị quân cờ (material-only eval) và ưu tiên nước bắt quân (move ordering)
- Chưa triển khai nhập thành, bắt tốt qua đường, phong cấp, lặp lại thế cờ, quy tắc 50 nước
- Đạt mức hiệu năng khoảng 1170~1200 Elo, gây chú ý như một trường hợp triển khai động cơ cờ vua trong mã dưới 2KB
Tổng quan dự án
- Sameshi là một động cơ cờ vua tối giản hỗ trợ bộ luật giới hạn, với tổng kích thước mã chỉ khoảng 1.95KB
- Tệp chính là
sameshi.h, và phiên bản dễ đọc hơn nằm trong readable/sameshi.h
- Kho GitHub cũng cung cấp
main.c, Makefile, .gitignore cùng các tệp liên quan
- Video demo đã được công bố trên YouTube, có thể xem hoạt động thực tế của dự án
Cấu trúc cốt lõi (core)
- Động cơ gồm sáu thành phần chính sau
- Cấu trúc bàn cờ mailbox 120 ô
- Thuật toán tìm kiếm Negamax
- Cắt tỉa Alpha-Beta
- Đánh giá dựa trên giá trị quân cờ (material-only evaluation)
- Ưu tiên nước bắt quân (move ordering)
- Kiểm tra đầy đủ nước đi hợp lệ, bao gồm chiếu, chiếu hết và hết nước đi (stalemate)
- Các tính năng chưa được triển khai gồm nhập thành, bắt tốt qua đường, phong cấp, lặp lại thế cờ và quy tắc 50 nước
Hiệu năng (strength)
- Được đánh giá ở mức khoảng 1170 Elo, với khoảng tin cậy 95% là 1110~1225 Elo
- Được đo dựa trên kết quả 240 ván đấu với Stockfish (mức 1320~1600)
- Thử nghiệm trong điều kiện độ sâu 5 cố định (fixed depth 5), tối đa 60 ply, và bộ luật giới hạn
Đặc điểm kỹ thuật
- Tổng kích thước mã dưới 2KB, gồm C 98.6% và Makefile 1.4%
- Tối đa hóa tính gọn nhẹ và hiệu quả thuật toán, triển khai logic cờ vua với lượng mã tối thiểu
- Được phân loại theo các chủ đề chess-engine, chess, demoscene
Tình trạng kho mã
- Ghi nhận 143 sao và 5 fork trên GitHub
- Các mục Issues, Pull requests, Projects, Security đều đang trống
- Mô tả kho mã được tóm tắt là “a ~1200 Elo chess engine that fits within 2KB”
1 bình luận
Ý kiến trên Hacker News
Dự án này thực sự rất tuyệt. Việc có cả tính năng stalemate cũng rất hay, nhưng tôi tò mò không biết sẽ cần bao nhiêu dung lượng để hiện thực toàn bộ luật chơi
Như tác giả đã nói, nếu thiếu castling, en passant, promotion, lặp lại vị trí và luật 50 nước thì khó mà gọi là cờ vua hiện đại
Với một engine nhỏ thì có thể bỏ qua lặp lại vị trí và luật 50 nước, nhưng castling, en passant và promotion theo tôi là bắt buộc
Video Chess năm 1980 đã hỗ trợ toàn bộ luật trong 4KB
Vì vậy tôi tò mò engine tương thích UCI nhỏ nhất hiện nay là gì. Làm một engine siêu nhỏ hỗ trợ đầy đủ luật và vượt qua được nó có vẻ sẽ là một mục tiêu thú vị
Nhân tiện, chiếc Fidelity CC3 mà tôi dùng vào đầu những năm 1980 cũng hỗ trợ castling và en passant
Bản JavaScript 2KB có cả castling, en passant, promotion, tìm kiếm và GUI
còn bản assembly 326 byte thì thiếu các luật đặc biệt
Không có bản tương thích UCI, nhưng có vẻ sẽ dễ hiện thực hơn GUI. Có thể một số fork của bản JS đã thêm tính năng đó
Dự án rất hay. Có vẻ có thể tận dụng frontend của GNU Chess để giảm số dòng mã và chỉ hiện thực phần backend
Về bug report, tôi phát hiện rằng tốt không thể đi hai ô sau khi đã đi một ô trước đó, nhưng nước
b6b4lại được cho phépCông cụ mà các nhà phát triển engine cờ vua dùng thường xuyên nhất để ước tính ELO là cutechess. Bên trong nó dùng SPRT
Một công cụ khác là Ordo, nhưng tôi chưa trực tiếp dùng thử
Tôi tự hỏi liệu có thể đạt được 1 ELO trên mỗi byte hay không. Có thể làm nhỏ hơn nữa, nhưng cũng có thể kém thông minh hơn
Thứ này gần với một chương trình có thể di chuyển các quân cờ hơn là cờ vua thực sự. Vì nó thiếu castling, en passant, promotion, lặp lại vị trí và luật 50 nước
Đôi khi người ta nói đã hiện thực cờ vua với kích thước cực nhỏ, nhưng thực tế lại lược bỏ những luật quan trọng
Nếu muốn tìm các engine thật sự nhỏ mà mạnh, tôi khuyên dùng asmFish viết bằng x86 assembly (khoảng 130KiB), OliThink khoảng 1000 dòng, và Xiphos với mã C đơn giản nhưng hiệu năng mạnh
Cũng có những engine 4KB từng xuất hiện ở TCEC, nhưng theo tôi các tuyên bố đó vẫn cần có dấu hoa thị (*)
Toledo là một họ chương trình cờ vua nhỏ nhưng khá mạnh
Gần đây tôi cũng đã hiện thực một engine cờ vua bao gồm toàn bộ luật bằng khoảng 400 dòng mã dễ đọc
Ban đầu tôi làm bằng Java, rồi sau đó port sang ngôn ngữ Bau do tôi tạo ra
Nó còn có cả terminal UI, và tuy ELO vẫn đang được đo nhưng tôi vẫn chưa thắng được nó
Đặc biệt phần hiện thực castling khá khó, nhưng bản thân thử thách đó rất vui
Tham khảo mã cờ vua của ngôn ngữ Bau
Tôi tò mò họ đã xử lý các ván mà Stockfish muốn nhập thành như thế nào. Đây là một nước đi xuất hiện rất thường xuyên, nên nếu không hỗ trợ nó thì rất khó đánh giá sức mạnh của engine
Vì thế mọi ván đều được chơi như cùng một “biến thể cờ vua không castling”
Đánh giá này không dành cho toàn bộ cờ vua, mà chỉ cho biến thể bị giới hạn đó
Quá tuyệt! Tôi đã thêm dự án này vào HN Arcade
Liên kết HN Arcade