マンボウは、Pythonで書かれたシンプルですが、強力なチェスエンジンです。シンプルなUCIインターフェイスとコメントとホワイトスペースの削除により、わずか131行のコードを占有します! ( build/clean.sh sunfish.py | wc -l )。しかし、それは2000年以上のlichessで評価で再生されます。
マンボウは小さく、シンプルであるように努力しているため、コードは実験に最適なプラットフォームを提供します。人々はそれを並列検索アルゴリズムのテスト、評価機能の実験、深い学習チェスプログラムの開発に使用しています。今日それをフォークして、あなたができることを見てください!
スフィッシュを実行する最も簡単な方法は、「ファンシー」ターミナルインターフェイスを使用することです。
$ tools/fancy.py -cmd ./sunfish.py
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
ターミナルインターフェイスは、移動を入力するために代数表記を使用します。ここにそれがどのように機能するかの簡単な概要を示します。ホワイトの観点から、列に左から右にAHとラベル付けされ、行は下から上部まで1-8とラベル付けされます。各正方形は、それぞれの文字で数字よりも名前が付けられています(例:A2、C3、H8)。動きは、動くピースの最初の文字と宛先スクエアが通信します(ポーンの動きのPは省略され、nは騎士にnが使用されます)。同じピースの1つ以上が正方形に移動できる場合は、移動するピースのファイルを指定してください。それがまだ曖昧な場合は、列を指定します。
端子インターフェイスを使用するには、使用される表記は特定の形式である必要があります。そうしないと、入力された移動が正しく読み取られません。 「x」はキャプチャを示すために使用されることもありますが、省略する必要があります(例:BXD4ではなくBD4)。 「+」を使用してチェックを示さないでください(例:BF7+ではなくBF7など)。 「=」を使用してポーンプロモーション(E8QではないE8 = Q)を示しないでください。ポーンキャプチャを示す必要な表記法は、エンディングスクエア(GF4ではなくGF4など)が続きます。キャストリングは、小文字 'o(例えばooとooo)で示さなければなりません。ファイルまたはcolummの指定は、作品を記載した後である必要があります(例:rae1は1ではありません1)。 enが通行人に注目するとき、宛先の正方形は、捕らえられたポーンのクエアではなく、ポーンが続く正方形でなければなりません(例えば、ef5ではなくef6)。
端子インターフェイスは、明示的な表記もサポートしています。これは、ソーススクエアが記載されている場所に続いて、宛先スクエア(例:E2E4)が続きます。
これには、Python-Chessパッケージが必要です。真のミニマリストの体験のために、最初に私たちは圧縮された実行可能ファイル(3kb未満!)にサンフィッシュを「梱包」し、直接実行できます。
$ build/pack.sh sunfish.py packed.sh 全長:2953 $ ./packed.sh GO WTIME 1000 BTIME 1000 WINC 1000 BINC 1000に行きます 情報深さ1スコアCP 0 PV D2D4 BestMove D2D4
(コマンドの完全なセットについては、UCI仕様を参照してください。)
また、PychessやArenaなどのグラフィカルなインターフェイスを使用してマンボウを実行することも可能です。
最後に、あなたは今、地衣類でマンボウを演奏したり、RecursingのRustポートに対抗したり、地衣類でも約100個のElo強度です。
効率的に更新可能なニューラルネットワークを使用した実験バージョンがあります。上記のように、ファンシー端末インターフェイスを使用してテストできます。
$ tools/fancy.py -cmd "./sunfish_nnue.py nnue/models/tanh.pickle" ...
たとえば、Stockfishの大規模なnnueとは対照的に、このネットワークはわずか1207バイトです!これにより、サンフィッシュが4kb未満に詰め込まれるようになります。 NNUEを使用すると、マンボウは位置的に優れたプレイをしますが、実際の実装はまだ十分に速くないため、戦術的にはさらに悪化します。
マンボウは、50の動き描画ルールを除くすべてのチェスルールをサポートしています。
マンボウをより強くしようとする多くの方法があります。最初に、ボード表現から可変配列に変更し、速い方法を追加してピースを列挙することができます。その後、専用のキャプチャ生成を実装し、検出を確認し、回避を確認できます。また、すべてをビットボードに移動したり、Cでコードの一部を実装したり、並列検索で実験したりすることもできます。
マンボウをより強くするもう1つの方法は、チェスの知識を与えることです。現在の評価関数は、ピースの正方形のテーブルのみを使用します。これは、MidgameとEndgameを区別することさえありません。また、より多くの剪定(現在はNULL MOVEのみが完了している)を実験することもでき、現在は使用されていません。最後に、マンボウはより高度な移動順序であるMVV/LVAの恩恵を受けるかもしれません。
強力なマンボウを手に入れる簡単な方法は、Pypy Just-in-Time Intepreterと一緒に走ることです。特に、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%
マンボウという名前は、実際にはピグミーのマンボウを指します。これは、「py」という文字から始まる非常に少数の魚の1つです。魚の使用は、Stockfish、Zappa、Rybkaなどの優れたエンジンの精神にあります。
遺産の観点から、マンボウは、Geert MullerとPychessによってMicro-Maxからはるかに多くを借りています。
GNU GPL V3