翻车鱼是用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