強力な AI を備えた XQWizard 用 XiangQi (中国チェス) エンジン
中国棋戦プログラム ElephantEye (エレファントアイ) バージョン:3.15
Xiangqi Encyclopedia Network* 2008 年 3 月
(*メールアドレス: [email protected])
1. はじめに
ElephantEye は、GNU Lesser General Public License に従うことを前提として、チェス愛好家とプログラマは、ElephantEye とそのソース プログラムを自由に使用できる無料の中国チェス プログラムです。
ElephantEye の中国語名は「象の目」で、「馬の足」と「大砲のフレーム」とともに中国のチェスの「チェス盤上の 3 次元」を構成します。 ElephantEye は通常、棋譜編集ソフトウェアである ElephantBoard と組み合わせて使用されます。これは、明確な計画を持つことを意味します (Board は英語で「盤」を意味します)。 (注: ElephantBoard は現在「Chess Wizard」という名前に変更されています。)
2. エンジン契約
ElephantEye は UCCI 3.0 をサポートしています。ライトレッド Xiangqi ユーザーは、UCCI エンジン アダプター (UCCI2QH) を通じて ElephantEye エンジンを呼び出すことができます。
(1) サポートされている UCCI コマンドは次のとおりです。
うっちー
オプションを設定...
位置 {fen <fen_str> | 移動 <move_list>]
banmoves <move_list>
行って [考えて描く] ...
ポンダーヒット [ドロー] |
プローブ {fen <fen_str> | [移動 <move_list>]
やめる
(2) 返される UCCI 情報は次のとおりです。
id {名前 <エンジン名> | バージョン <バージョン名> | 著作権 <著作権情報> | ユーザー <ユーザー名>}
オプション...
ウッチック
情報...
{nobestmove | bestmove <best_move> [熟考 <ponder_move>] [引き分け | 辞任]}
Pophash [bestmove <best_move>] [下限 <値> 深さ <深さ>] [上限 <値> 深さ <深さ>]
さよなら
3. パラメータの設定
UCCI エンジンとして、ElephantEye には設定できるパラメーターがいくつかあります (<Chess Wizard> で直接設定できます)。
(1) 開始ライブラリ:
デフォルトの開始ライブラリは、ElephantEye プログラム (ELEEYE.EXE) の現在のディレクトリにある BOOK.DAT で、これには 10,000 個の対称位置が含まれています。
(2) 思考時間:
思考の深さを制限することは通常、良い選択ではありません。制限時間を設定し、プログラムに自動的に時間を割り当てることをお勧めします。殺人ゲームを解決したり、状況を分析したりするとき、プログラムは際限なく考えることができ、いつでも思考を停止できます。
(3) 交換テーブルサイズ:
置換テーブルのサイズはプログラムの実行速度にはほとんど影響せず、デフォルト設定の 16MB で十分ですが、ElephantEye は置換テーブルのサイズを設定する機能を提供します。メモリが許せば、スロー チェスをプレイするときに置換テーブルのサイズを適切に増やすことができますが、物理メモリの半分を超えないようにすることをお勧めします。
(3) 仕立ての程度:
プログラムの動作を高速化するために、ElephantEye はデフォルトで空のクリッピングを使用し、悪影響が生じる可能性は最小限に抑えられています。最下位レベルのみが空白のトリミングを無効にします。
(4) 知識量:
ElephantEyeの知識レベルのうち、知識量が状況評価の精度に関係するため、状況評価機能を使用しません(サブパワーの値のみが考慮されます)。レビューの知識をもとにポジションなどを分析したい場合は、この設定を試してみてください。
(5) ランダム性:
ElephantEye は 4 レベルのランダム性を備えています。ランダム性が大きいほど、プログラムが最善手ではないと考える手を思いつく可能性が高くなりますが、「最善手ではない」ことに利点がないわけではなく、特に開始ライブラリが有効になっていない場合には、適切に増加させます。ランダム性を回避できる プログラムは同じ状況で同じ動きをします。
4. ルール
ElephantEye はバージョン 2.0 から「一方的な長期負け判定」だけでなく、「ヒット」には「チェック」と「キャッチ」も含まれるようになりました。プログラムの複雑さの制限により、次の 3 つの状況のみが「キャッチ」として認識されます。
A. 根のある馬と戦車または砲兵(ポーン)。
B. 根のある荷車と馬砲兵(ポーン)。
C. 大砲は戦車または根を張った騎兵 (ポーン) を捕らえます。
ElephantEye は、UCCI コマンド banmoves... をサポートしているため、複雑な状況では長い動きを正しく識別できない可能性がありますが、ユーザーは、エンジンが「長い動き」を禁止したと考えると、次の「禁止の設定」機能を使用できます。 <チェスウィザード> エンジンを強制的に切り替えます。
5. ゲームアルゴリズム
ElephantEye は、厳密かつ効果的なゲーム アルゴリズムを使用するブルート フォース チェス プログラムです。
(1) ビット行とビット列を使用してジェネレータを移動します。
ビット行 (BitRanks) とビット列 (BitFiles) は、スライディング チェスの駒 (車や大砲) の移動の生成に役立ちます (特にキャプチャ移動)。ビット行とビット列は、レイのループの代わりにルックアップ テーブルを使用できます。 ElephantEye では、ビット行とビット列のテクノロジーが、移動ジェネレーターだけでなく、ピン留めの決定にも使用されます。
(2) 静的状況の検索:
静的検索を実行する場合、ElephantEye は将軍を捕獲または削除する動きを検索しました。捕獲する動きを検索するとき、ElephantEye は川を占領できないポーンや防御状態にないビショップを捕らえた兵士などの重要でない捕獲を除外しました。待機中のメソッドは静的検索の範囲外です。
(3) サイクル移動と長距離検出:
ElephantEye はループ動作を識別でき、ループ動作が発生した場合、どちらの側がリーダーであるかを判断でき、キャプテンが禁止されているルールを利用します。ただし、現時点では ElephantEye はロンググラブを識別できません。
(4) 交換表:
ElephantEyeは、中国のチェスプログラム「Running Horses」の設計思想を参照し、深さ優先で常にカバーされる2層置換テーブルを使用し、ローアウト(ハイアウト)境界補正置換テーブル更新戦略を採用しています。
(5) 検査付きブランクカット:
ElephantEye は R=2 で空のクリッピングを使用し、エンドゲーム ステージではチェックされた空のクリッピングを使用します。
(6) 反復深化/子供を食べる動き/殺人的な動き/履歴テーブルのインスピレーション:
ElephantEye の動きの並べ替えは非常にシンプルかつ明確で、その後に反復的な深めの動き、優れたキャプチャの動き、キラーの動き、および生成的な動きが履歴テーブルによって並べ替えられます。
(7) ジェネラル/ソールは次のように拡張するものとします。
選択的な拡張機能の場合、ElephantEye は一般的な拡張機能のみを使用します。
(8) アルファ - ベータの主要なバリアント検索:
ElephantEye は、従来の再帰的アルファベータ プライマリ バリアント検索を使用します。
(9) 開始ライブラリ:
ElephantEye のオープニング ライブラリには、1990 年から 2005 年までの全国チェスの個人戦、チーム戦、五羊杯、リーグ、その他の試合のトップ 8,000 試合から抽出された合計 10,000 の対称手が含まれています。
(10) バックステージでの考え方と時間配分戦略:
ElephantEye は背景思考機能をサポートしており、期間ベースと時間外の 2 つの時間配分戦略を提供し、合理的に時間を自動的に割り当てます。
6. 図書館を開く
ElephantEye のオープニングライブラリは「ElephantEye オープニングライブラリメーカー」で作成できます。制作ツールを実行した後、まず PGN ゲーム レコードが存在するフォルダーを選択し、それをオープニング ライブラリ ファイル (通常は BOOK.DAT) として保存する必要があります。一般に、オープニング ライブラリの生成に使用されるチェス レコードの数が増えるほど、生成されるオープニング ライブラリ ファイルも大きくなります。
作成したオープニング ライブラリを ElephantEye で有効にするには、ElephantEye ディレクトリ内の BOOK.DAT を、生成されたオープニング ライブラリ ファイルに置き換えるだけです。また、<Chess の「エンジン設定」ダイアログ ボックスでオープニング ライブラリ ファイルを指定することもできます。ウィザード>。
7. 状況評価関数ライブラリ
ElephantEye バージョン 2.1 から、プログラムの検索部分と状況評価部分が分離され、検索部分と状況評価部分が API 関数を呼び出すことによって結合されます。
他のチェス プログラマーは、ElephantEye に基づいてより自由にプレイできます。 LGPL 協定では、検索と状況評価の 2 つの部分は独立したプログラム ライブラリとして扱われ、その一部を使用するには、その部分のソース プログラムを公開するだけで済みます。つまり、状況評価部分がオープンコードを使用していない場合、プログラマはこの部分のソースプログラムを公開する義務はなく、検索部分についても同様である。
ElephantEye の状況評価 API 関数インターフェースは次のように定義されています。
A. 状況評価エンジン名: const char *GetEngineName(void);
B. ポジション事前評価関数インターフェイス: void PreEvaluate(PositionStruct *lppos, PreEvalStruct *lpPreEval);
C. 位置評価関数インターフェイス: int Evaluate(const PositionStruct *lppos, int vlAlpha, int vlBeta);
このうち、PositionStruct と PreEvalStruct は、それぞれposition.h と pregen.h で定義された構造に準拠する必要があります。
8. ソースプログラム
ElephantEye のソースプログラムには 9 つのモジュールが含まれており、その内容は大まかに以下のとおりです。
(1) ucci.h/ucci.cpp
UCCI コマンド解釈モジュール。Windows および Unix での行入力受信プログラムを含みます。
(2) pregen.h/pregen.cpp
Zobrist 配列を生成し、プリセット テーブルを移動するためのモジュール。 ElephantEye のプリセット テーブルは 2 つの部分に分かれています。1 つはスライディング チェスの駒 (駒なし、ルーク、大砲、その他すべての駒を含む) のプリセット テーブルで、2 つは位置行と位置列のテクノロジを実装しています。これにより、手を生成する際の面倒な境界判断が回避されます。
(3)position.h/position.cpp
主に技や局面のデータ構造と機能について説明します。状況の処理がこのモジュールの焦点です。処理内容には、状況の初期化、FEN 文字列のインポート、チェスの駒の移動、キラーの手の合理性の判断、全体の判断、リーダーとサイクルの検出、駒の値の調整が含まれます。 5つのサブフォース位置値テーブルも含まれています。
(4)genmoves.cpp
手技ジェネレータには駒を取る手と、駒を取らない手を生成する2種類がありますが、将軍を除去する手だけを生成することはできません。子供を食べる動きを生成する際、各動きには対応する MVV (LVA) (または準 SEE) 値が割り当てられます。このモジュールには、チェスの駒が保護されているかどうかを特定して MVV (LVA) 値を計算する機能もあります。保護されたチェスの駒の場合、MVV-LVA 値を計算します (保護されていないチェスの駒の場合はカウントされません)。 、MVV 値のみを計算します。したがって、チェスの駒にルートがあるかどうかを判断するプログラムもこのモジュールに含まれています。
(5) hash.h/hash.cpp
置換テーブル、履歴テーブル、移動リスト管理モジュールには、置換テーブルの割り当てとアクセス、メジャーバリエーションの取得などの操作が含まれます。
(6) book.h/book.cpp
ライブラリ読み取りモジュールを開きます。
(7)movesort.h/movesort.cpp
移動リストソートモジュール。
(8) search.h/search.cpp
静的検索、完全検索、ルートノード検索の 3 つの主要なプロセスに加えて、検索モジュールには、反復深化制御、背景思考、時間割り当て、検索パラメータ統計、検索情報出力も含まれています。このモジュールはプログラム全体のコアモジュールです。
(9) eleeye.cpp
メインプログラム (つまり、メイン関数)。
(10) preeval.h/preeval.cpp
サブパワーポジション配列プリジェネレーターElephantEyeは、「攻撃/守備」と「序盤/中盤/終盤」の2つのパラメータに基づいてサブパワーポジション配列をリニアに調整します。
(11) 評価.cpp
ElephantEye は状況評価機能に関して、4 レベルの遅延評価メカニズムを採用しています。最も大まかなレベルは特別なチェスのパターンのみを評価し、さらに次のレベルは封じ込めを評価し、さらに高いレベルは飛車の柔軟性を評価し、最高レベルは障害も評価します。騎士の。
9. プログラムのパフォーマンス
ElephantEye の設計は検索アルゴリズムに重点を置いていますが、知識が比較的不足しています。 2.8GHz プロセッサでは、1 秒あたり約 1,000,000 ノード (通常の検索と静的検索を含む) を検索でき、典型的な中盤の状況では約 11 レイヤーを 1 分以内に検索できます。
チェス力の点では、ElephantEye は「Qiyin」や SaoLa (Chess Challenger) などのプログラムと同レベルですが、局面評価機能の欠陥により、ElephantEye はトップの商用チェス ソフトウェア (Xie Master、Xie Master) には程遠いです。 Xiangqi Family、Xiangqi Qibing、Qi)にはまだ一定のギャップがあります。
ElephantEye は Lianzhong や Yitian などのチェス ゲーム Web サイトでテストされており、成績ポイントで測定すると、Lianzhong.com の記録は約 2,500 点、Yitian の速いチェスの記録は約 2,000 点、遅いチェスの記録は約 1,500 点です。
2005 年 9 月、エレファントアイは台湾のチェス ソフトウェア愛好家である石金山氏の協力を得て、台北で開催された第 10 回 ICGA コンピュータ オリンピックの中国チェス団体戦に出場し、7 勝 5 敗 14 敗の成績を収めました。 14 プログラム、2006 年 8 月に 11 位にランクイン。北京で開催された第1回全国コンピュータゲーム選手権に出場し、7勝2敗11敗の成績で18プログラム中7位となった。
10. 関連リソース
ElephantEye のソース プログラムは、SourceForge の XiangQi Wizard プロジェクトで公開されており、そのページは次のとおりです。
http://sourceforge.net/projects/xqwizard/
ElephantEye のバージョンアップは、SourceForge SVN サイトでリアルタイムに同期してリリースされます。アクセス アドレスは次のとおりです。
https://xqwizard.svn.sourceforge.net/svnroot/xqwizard/
TortoiseSVN などの SVN クライアント プログラムを使用して、最新のコードを取得できます (開発者と完全に同期されています)。TortoiseSVN の紹介およびダウンロード アドレスは次のとおりです。
http://sourceforge.net/projects/tortoisesvn/
ElephantEye は、UCCI をサポートするチェス プログラム (<Chess Wizard> など) で実行する必要があります。<Chess Wizard> インストール プログラムには、ElephantEye の最新バージョンが含まれています。
<チェスウィザード>は以下のWebサイトからダウンロードできます。
http://www.skycn.com/soft/24665.html (Sky ソフトウェア ステーション)
http://www.onlinedown.net/soft/38287.htm (華潤ソフトウェアパーク)
ElephantEye 自体のソース プログラムに加えて、ElephantEye のソース プログラム パッケージには次の追加モジュールも含まれています。
(1) ベースコード (base): アセンブリ命令、システム関数呼び出しなどの機能を提供します。
(2) 中国チェス ルール モジュール (アクセス): 他のソフトウェアが ElephantEye コードを使用するためのインターフェイスを提供します。
(3)オープニングライブラリ作成モジュール(BOOK):オープニングライブラリBOOK.DATを作成するコード。
(4) UCCI エンジン リーグ シミュレーター (LEAGUE): UCCI エンジンのテストと競技用の自動バッチ マッチ プラットフォームを提供します。
(5) UCCI Engine Search Tree Analyzer (TREE): UCCI エンジン用の検索ルート分析ツール (UCCI 2.2+ をサポート)。
(6) XQF チェス レコード ツール (XQFTOOLS): XQF およびその他のチェス レコードを PGN に変換するツールを提供します。
(7) Light Red Chess アダプター (UCCI2QH): Light Red Chess が UCCI エンジンを呼び出すためのインターフェイスを提供します。
(8) ライトレッド チェス エンジンは UCCI アダプター (QH2UCCI) をサポートします。「Dream Egg」ライトレッド チェスが UCCI エンジン テストに参加するためのインターフェイスを提供します。
(9)BBS Chess(BBSCHESS):Visual Basicで作られた棋譜設定ツールであり、各大学のBBSに色分けした棋譜を貼り付けることができる。
(10) チェス盤画像ジェネレーター (FEN2BMP): チェスと中国のチェスの FEN ファイルを BMP ファイルに変換できる実用的なツール。
(11) コーディング変換 (コーデック)。簡略化および従来のトランスコーディング、UNIX テキスト トランスコーディング、Base64 トランスコーディングなどを含みます。
(12) その他のツール (MISC): 単純なネットワーク通信、パイプライン テスト、その他のツールを含みます。
(13) ドキュメンテーションドキュメント (DOC): 「中国チェスプログラミングの探求」シリーズ。
(14) 参加チェスの記録 (CCGC): 第 1 回全国コンピュータ ゲーム選手権 (CCGC) に参加している ElephantEye のすべてのチェスの記録。
ElephantEye についてさらに詳しい情報が必要な場合は、Xiangqi Encyclopedia Web サイトにログインしてください。
http://www.xqbase.com/