Sunfish는 파이썬으로 작성된 단순하지만 강력한 체스 엔진입니다. 간단한 UCI 인터페이스와 주석과 공백을 제거하면 131 줄의 코드를 차지합니다! ( build/clean.sh sunfish.py | wc -l ). 그러나 리히스에서 2000 년 이상 등급에서 재생됩니다.
Sunfish는 작고 간단하게 노력하기 때문에 코드는 실험을위한 훌륭한 플랫폼을 제공합니다. 사람들은 병렬 검색 알고리즘 테스트, 평가 기능 실험 및 딥 러닝 체스 프로그램 개발에 사용했습니다. 오늘 그것을 포크하고 당신이 할 수있는 일을보십시오!
Sufish를 실행하는 가장 간단한 방법은 "멋진"터미널 인터페이스를 통한 것입니다.
$ 도구/fancy.py -cmd ./sunfish.py
Sunfish와의 경기 2023.
흰색이거나 검은 색이되고 싶습니까? 검은색
1 ♗ ♗ ♘ ♔ ♔ ♕ ♗ ♘ ♖ ♖
2 ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
3
4
5
6
7 ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
8 ♝ ♝ ♞ ♚ ♚ ♛ ♝ ♞ ♜ ♜
HGFEDCBA
점수 : 23, 노드 : 11752, NPS : 13812, 시간 : 0.9
내 움직임 : D4
1 ♗ ♗ ♘ ♔ ♔ ♕ ♗ ♘ ♖ ♖
2 ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
3
4 ♙
5
6
7 ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
8 ♝ ♝ ♞ ♚ ♚ ♛ ♝ ♞ ♜ ♜
HGFEDCBA
이동 (예 : C6 또는 G8H6) : NF6
터미널 인터페이스는 입력 이동에 대수 표기법을 사용합니다. 다음은 작동 방식에 대한 간단한 개요입니다. White의 관점에서 열에는 Ah가 왼쪽에서 오른쪽으로 레이블이 지정되고 행에는 하단에서 상단까지 1-8으로 표시됩니다. 각 정사각형은 숫자보다 각각의 문자로 명명됩니다 (예 : A2, C3, H8). 이동은 이동 조각의 첫 글자와 대상 사각형 (Pawn Moves for Pawn Moves)에 의해 전달됩니다 (Pawn Moves의 P는 생략되고 기사에 사용됩니다). 같은 조각 중 하나 이상이 사각형으로 이동할 수 있다면 이동 조각의 파일을 지정하십시오. 여전히 모호한 경우 열을 지정하십시오.
터미널 인터페이스를 사용하려면 사용 된 표기법은 특정 형식이어야합니다. 그렇지 않으면 입력 된 이동을 올바르게 읽지 않습니다. "X"는 때때로 캡처를 나타내는 데 사용되지만 생략해야합니다 (예 : BXD4가 아님). "+"를 사용하여 확인을 표시하지 마십시오 (예 : BF7이 아닌 BF7). "="를 사용하여 전당포 프로모션 (예 : E8Q가 아닌 E8 = Q)을 표시하여 전당포 캡처를 나타 내기 위해 필요한 표기법을 시작하고 종료 정사각형 (예 : GF가 아닌 GF4)을 시작합니다. 성은 소문자 'O (예 : oo 및 ooo)로 표시되어야합니다. 파일 또는 columm을 지정하는 것은 조각을 명시한 후에야합니다 (예 : RAE1은 are1). en 력이 주목할 때, 대상 사각형은 전당포가 끝나야하며, 포로가 캡처 된 전당포가 아니라 폰이 끝나야합니다 (예 : ef6은 ef5가 아님).
터미널 인터페이스는 또한 명시적인 표기법을 지원합니다. 이곳은 소스 광장과 대상 사각형 (예 : E2E4)이 언급되는 곳입니다.
이를 위해서는 Python-Chess 패키지가 필요합니다. 진정한 미니멀리스트 경험을 위해 먼저 압축 실행 가능 (3KB 미만!)에 Sunfish를 "포장"하고 직접 실행할 수 있습니다.
$ build/pack.sh sunfish.py packed.sh 총 길이 : 2953 $ ./packed.sh WTIME 1000 BTIME 1000 WINC 1000 BINC 1000으로 이동하십시오 정보 깊이 1 점수 CP 0 PV D2D4 Bestmove D2D4
(전체 명령 세트는 UCI 사양을 참조하십시오.)
Pychess 또는 Arena와 같은 그래픽 인터페이스로 Sunfish를 실행할 수도 있습니다.
마지막으로 Lichess에서 지금 Sunfish를 연주하거나 Recursing의 Rust Port와의 경기, Lichess에서도 약 100 Elo 강력합니다.
효율적으로 업데이트 가능한 신경망을 사용하는 실험 버전이 있습니다. 위와 같이 멋진 터미널 인터페이스를 사용하여 테스트 할 수 있습니다.
$ 도구/fancy.py -cmd "./sunfish_nnue.py nnue/models/tanh.pickle" ...
STOCKFISH의 큰 NNUE와 달리이 네트워크는 1207 바이트입니다! 그것은 Sunfish Nnue가 여전히 4KB 미만으로 포장 할 수 있도록합니다. NNUE를 사용하여 Sunfish는 구현이 여전히 빠르지 않기 때문에 위치 적으로 더 나은 위치에있어 더 나은 재생을 할 것입니다.
Sunfish는 50 개의 Moves Draw 규칙을 제외하고 모든 체스 규칙을 지원합니다.
Sunfish를 더 강하게 만들려고 할 수있는 방법에는 여러 가지가 있습니다. 먼저 보드 표현에서 변동성 배열로 변경하고 조각을 열거하는 빠른 방법을 추가 할 수 있습니다. 그런 다음 전용 캡처 생성을 구현하고 탐지를 확인하고 회피를 점검 할 수 있습니다. 또한 모든 것을 비트 보드로 이동하거나 C에서 코드의 일부를 구현하거나 병렬 검색을 실험 할 수도 있습니다!
Sunfish를 더 강하게 만드는 다른 방법은 체스에 대한 더 많은 지식을 제공하는 것입니다. 현재 평가 함수는 조각 정사각형 테이블 만 사용합니다. 중간 게임과 엔드 게임을 구별하지도 않습니다. 또한 더 많은 가지 치기를 실험 할 수 있습니다 (현재는 Null Move 만 수행 중이며 확장)는 현재 사용되지 않습니다. 마지막으로 Sunfish는 MVV/LVA보다 고급 이동 순서로 혜택을 볼 수 있습니까?
강한 태양 피쉬를 얻는 쉬운 방법은 정시의 정시 인트 프렛과 함께 달리는 것입니다. 특히 Python2.7 버전의 Pypy는 빠른 시간 컨트롤에서 CPYTHON (2 또는 3) Intepreters와 비교하여 250 ELO 부스트를 제공합니다.
Rank Name Elo +/- Games Score Draws
1 pypy2.7 (7.1) 166 38 300 72.2% 19.7%
2 pypy3.6 (7.1) 47 35 300 56.7% 21.3%
3 python3.7 -97 36 300 36.3% 20.7%
4 python2.7 -109 35 300 34.8% 24.3%
Sunfish라는 이름은 실제로 피그미 선 피쉬를 말합니다. 물고기의 사용은 Stockfish, Zappa 및 Rybka와 같은 훌륭한 엔진의 정신입니다.
유산 측면에서 Sunfish는 Geert Muller와 Pychess의 Micro-Max에서 훨씬 더 많이 빌립니다.
gnu gpl v3