翻車魚是用Python編寫的簡單但強大的國際象棋引擎。憑藉其簡單的UCI接口,並刪除了評論和空格,它僅佔用131行代碼! ( build/clean.sh sunfish.py | wc -l )。然而,它在座位上的評分超過2000。
由於翻車魚很小並且努力簡單,因此代碼為實驗提供了一個很好的平台。人們已將其用於測試並行搜索算法,實驗評估功能以及開發深度學習國際象棋程序。今天就分叉,看看您可以做什麼!
運行sufish的最簡單方法是通過“花哨”終端接口:
$ tools/fancy.py -cmd ./sunfish.py
與2023年的人群比賽。
您想成為白色還是黑色?黑色的
1♖♘♔♕♘♖
2♙♙♙♙♙♙
3
4
5
6
7♟♟♟♟♟♟♟
8♜♞♚♝♞♞
HGFEDCBA
得分:23,節點:11752,NP:13812,時間:0.9
我的舉動:D4
1♖♘♔♕♘♖
2♙♙♙♙♙♙
3
4♙
5
6
7♟♟♟♟♟♟♟
8♜♞♚♝♞♞
HGFEDCBA
您的舉動(例如C6或G8H6): NF6
終端接口使用代數符號進行輸入移動。這是有關其工作原理的簡要概述:從懷特的角度來看,這些列從左到右標記為AH,並且行從底部到頂部標記為1-8。每個正方形的命名為其各自的字母(例如A2,C3,H8)。移動件的第一個字母隨後是目的地廣場傳達的動作(省略了Pawn Moves的P,n用於騎士)。如果同一塊以上可以移動到正方形,請指定移動件的文件。如果仍然模棱兩可,請指定列。
為了使用終端接口,所使用的符號必須是特定格式的,否則將無法正確讀取輸入的移動。 “ X”有時用於表示捕獲,但必須省略(例如BD4而非BXD4)。請勿使用“+”表示檢查(例如BF7不是BF7+)。請勿使用“ =”表示典當促銷(例如e8q而非e8 = q)表示典當捕獲所需的符號啟動文件,然後結束正方形(例如gf4而非gf)。必須用小寫'O(例如OO和OOO)表示鑄造。指定文件或columm必須在說明該件之後(例如rae1 not as1)。當記錄EN傳球時,目的地正方形應為典當最終的正方形,而不是被捕獲的典當(例如EF6而不是EF5)。
終端接口還支持顯式符號。這是源平方的位置,其次是目標平方(例如E2E4)。
請注意,這需要Python-Chess包。為了獲得真正的極簡主義體驗,首先我們可以將其“打包”到壓縮的可執行文件中(少於3KB!),然後直接運行:
$ build/pack.sh sunfish.py packed.sh 總長度:2953 $ ./packed.sh GO W TIME 1000 BTIME 1000 WINC 1000 BINC 1000 信息深度1分數CP 0 PV D2D4 BestMove D2D4
(有關完整的命令,請參見UCI規範。)
也可以運行具有圖形接口(例如Pychess或Arena)的圖形界面。
最後,您現在可以在lichess上玩翻車魚,也可以與Rocurs的Rust Port(也可以在Lichess上進行比賽),這是Elo更強的。
使用有效更新的神經網絡有一個實驗版本。您可以使用上述花式終端接口對其進行測試:
$ tools/fancy.py -cmd“ ./sunfish_nnue.py nnue/complat/tanh.pickle” ...
與大型NNUE相反,該網絡僅為1207個字節!這樣一來,可以確保將Sunfish NNUE包裝成小於4KB。使用nnue,人民將在定位方面發揮更好的作用,但在戰術上更糟,因為實施仍然不夠快。
除了50個動作繪製規則外,Sunfish支持所有國際象棋規則。
您可能會嘗試通過多種方式使翻車魚更強壯。首先,您可以從板的表示形式更改為可變陣列,並添加一種快速的方式來枚舉碎片。然後,您可以實現專用的捕獲生成,檢查檢測和檢查逃避。您也可以將所有內容移至Bitboards,在C中實現一部分,或通過並行搜索實驗!
使翻車魚更強大的另一種方法是使它更多地了解國際象棋。當前的評估功能僅使用件方形表 - 它甚至沒有區分中間遊戲和最終遊戲。您還可以嘗試進行更多修剪 - 目前只完成了無效移動 - 並且擴展 - 目前沒有使用。最終,MVV/LVA可能會受益於更先進的舉動訂購,也許會受益嗎?
獲得強大的翻車魚的一種簡單方法是與PYPY JUST-INTE-INTEPRETER一起運行。特別是,與cpython(2或3)Intepters相比,Python2.7版本的PYTHON 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%
Sunphish這個名字實際上是指侏儒的翻車魚,這是從字母“ Py”開始的幾條魚之一。魚類的使用本著諸如Stockfish,Zappa和Rybka等偉大發動機的精神。
就遺產而言,煙魚從Micro-Max借用了Geert Muller和Pychess的更多內容。
GNU GPL V3