Sameshi – 2KB 안에 구현된 약 1200 Elo 체스 엔진
(github.com/datavorous)- 약 2KB 크기로 동작하는 경량 체스 엔진으로, 제한된 규칙 내에서 완전한 게임 진행이 가능함
- 120셀 메일박스 보드, 네가맥스 탐색, 알파-베타 가지치기 등 핵심 알고리듬을 포함함
- 기물 가치 기반 평가(material-only eval) 와 캡처 우선(move ordering) 방식을 사용함
- 캐슬링, 앙파상, 승진, 반복, 50수 규칙 등은 미구현 상태임
- 약 1170~1200 Elo 수준의 성능을 보이며, 2KB 이하 코드로 체스 엔진을 구현한 사례로 주목받음
프로젝트 개요
- Sameshi는 제한된 규칙을 지원하는 최소형 체스 엔진으로, 전체 코드 크기가 약 1.95KB에 불과함
- 주요 파일은
sameshi.h이며, 읽기 쉬운 버전은readable/sameshi.h에 포함됨 - GitHub 저장소에는
main.c,Makefile,.gitignore등이 함께 제공됨
- 주요 파일은
- 데모 영상이 YouTube에 공개되어 있으며, 실제 동작을 확인할 수 있음
핵심 구조 (core)
- 엔진은 다음 여섯 가지 주요 구성 요소로 이루어짐
- 120셀 메일박스 보드 구조
- Negamax 탐색 알고리듬
- Alpha-Beta 가지치기
- 기물 가치 기반 평가(material-only evaluation)
- 캡처 우선(move ordering)
- 체크·체크메이트·스테일메이트를 포함한 완전한 합법 수 검증
- 미구현 기능으로는 캐슬링, 앙파상, 승진, 반복, 50수 규칙이 명시되어 있음
성능 (strength)
- 약 1170 Elo 수준으로 평가되며, 95% 신뢰구간은 1110~1225 Elo
- Stockfish (1320~1600 레벨) 과 240판 대국 결과를 기반으로 측정됨
- 깊이 5(fixed depth 5) , 최대 60플라이, 제한된 규칙 조건에서 테스트됨
기술적 특징
- 전체 코드 크기가 2KB 미만으로, C 언어 98.6% , Makefile 1.4% 로 구성됨
- 경량화와 알고리듬 효율성을 극대화하여, 최소한의 코드로 체스 로직을 구현함
- 체스 엔진(chess-engine) , 체스(chess) , 데모씬(demoscene) 관련 주제로 분류됨
저장소 현황
- GitHub에서 143개의 스타, 5개의 포크를 기록함
- Issues, Pull requests, Projects, Security 항목은 모두 비어 있음
- 저장소 설명은 “a ~1200 Elo chess engine that fits within 2KB”로 요약됨
Hacker News 의견들
-
정말 멋진 프로젝트임. 스테일메이트 기능이 있는 것도 좋지만, 전체 규칙을 구현하려면 얼마나 많은 공간이 필요할지 궁금함
작성자가 언급한 것처럼 캐슬링, 앙파상, 프로모션, 반복, 50수 규칙이 빠져 있다면 현대 체스라 부르기 어렵다고 생각함
작은 엔진이라면 반복과 50수 규칙은 생략할 수 있겠지만, 캐슬링과 앙파상, 프로모션은 필수라고 봄
1980년의 Video Chess는 4KB 안에 전체 규칙을 지원했음
그래서 현재 가장 작은 UCI 호환 엔진이 무엇인지 궁금함. 그걸 능가하는 초소형 완전 규칙 엔진을 만드는 게 재미있는 목표가 될 듯함
참고로 1980년대 초에 내가 썼던 Fidelity CC3도 캐슬링과 앙파상을 지원했음-
ToledoChess에는 여러 언어로 구현된 버전이 있음
2KB짜리 JavaScript 버전은 캐슬링, 앙파상, 프로모션, 탐색, GUI까지 포함되어 있고
326바이트짜리 어셈블리 버전은 특수 규칙이 빠져 있음
UCI 호환 버전은 없지만 GUI보다 구현이 쉬울 듯함. JS 버전의 포크 중 일부가 그 기능을 추가했을 수도 있음
-
ToledoChess에는 여러 언어로 구현된 버전이 있음
-
멋진 프로젝트임. GNU Chess의 프론트엔드를 활용하면 코드 줄 수를 줄이고 백엔드만 구현할 수도 있을 것 같음
버그 리포트로, 폰이 이미 한 칸 이동한 후에는 두 칸 전진할 수 없는데b6b4가 허용되는 문제를 발견했음- 지적해줘서 고맙다는 답변을 받았음. 바로 패치 시도 예정이라고 함
-
체스 엔진 개발자들이 ELO 추정에 가장 자주 쓰는 도구는 cutechess임. 내부적으로 SPRT를 사용함
또 다른 도구로는 Ordo가 있는데, 직접 써보진 않았음 -
1바이트당 1 ELO를 달성할 수 있을까 궁금함. 더 작게 만들 수는 있지만 덜 똑똑해질 수도 있음
- 정말 멋진 코드 골프 챌린지라고 생각함
- 아주 낮은 레이팅 구간에서는 가능할지도 모르지만, 실용적인 수준에서는 금방 한계에 부딪힐 것 같음
-
이건 체스라기보다 체스 말들을 움직일 수 있는 프로그램에 가까움. 캐슬링, 앙파상, 프로모션, 반복, 50수 규칙이 빠져 있으니까
- 오랫동안 컴퓨터 체스를 해왔는데, 이런 식의 “체스 구현” 주장에는 익숙함
종종 극도로 작은 크기로 체스를 구현했다고 주장하지만, 실제로는 중요한 규칙을 생략한 경우가 많음
진짜로 작고 강력한 엔진을 찾는다면 x86 어셈블리로 작성된 asmFish(약 130KiB)나, 1000줄 정도의 OliThink, 그리고 단순한 C 코드로 강력한 성능을 내는 Xiphos를 추천함
TCEC에 등장한 4KB 엔진들도 있지만, 그 주장에는 주석(*)이 붙을 만한 부분이 있다고 봄
- 오랫동안 컴퓨터 체스를 해왔는데, 이런 식의 “체스 구현” 주장에는 익숙함
-
Toledo는 작지만 꽤 강한 체스 프로그램 계열임
-
나도 최근에 약 400줄의 읽기 쉬운 코드로 모든 규칙을 포함한 체스 엔진을 구현했음
처음엔 Java로 만들고, 나중에 내가 만든 언어 Bau로 포팅했음
터미널 UI까지 포함되어 있고, 아직 ELO는 측정 중이지만 내가 이기지 못했음
특히 캐슬링 구현이 까다로웠지만 도전 자체가 즐거웠음
Bau 언어의 체스 코드 참고- 왜 Bau에는 unsigned 숫자형이 없는지 궁금하다는 질문이 있었음
-
Stockfish가 캐슬링을 하려는 게임은 어떻게 처리했는지 궁금함. 캐슬링이 워낙 자주 나오는 수라, 그걸 지원하지 않으면 엔진의 강도를 평가하기 어렵다고 생각함
- 캐슬링 때문에 버린 게임은 없었음. 대신 Stockfish가 캐슬링, 앙파상, 프로모션을 하지 못하도록 합법 수 필터링을 적용했음
그래서 모든 게임이 동일한 “캐슬링 없는 변형 체스”로 진행되었음
이 평가는 전체 체스가 아니라 그 제한된 변형에 대한 것임
- 캐슬링 때문에 버린 게임은 없었음. 대신 Stockfish가 캐슬링, 앙파상, 프로모션을 하지 못하도록 합법 수 필터링을 적용했음
-
정말 멋짐! 이 프로젝트를 HN Arcade에 추가했음
HN Arcade 링크