コンピュータチェスの構成

コンピュータチェスは2つのプログラムから構成されています。

  • GUI
  • エンジン

「GUI」はグラフィカルなチェスボードや駒を使って、ユーザーからの入力やユーザーへの出力を担当するソフトウェアです。
実は「序盤の定跡」も「GUI」が担当しています。

「エンジン」は「GUI」から送られてきた「現在の局面」を元に次の1手を計算し、「GUI」へ送り返すソフトウェアです。
オプションで「序盤の定跡」に対応することもあります。 (ちなみに、Sayuriは対応していません。)

「GUI」と「エンジン」間の通信

「GUI」と「エンジン」間の通信は「パイプ」と「標準入出力」の間で「UCIコマンド」というテキストデータを使ってやり取りして実現しています。

UCIコマンドのリファレンス : http://wbec-ridderkerk.nl/html/UCIProtocol.html

computer_chess

「スレッドの数」と「ハッシュテーブルのサイズ」

エンジンの「スレッドの数」と「ハッシュテーブルのサイズ」の設定はとても大切です。 適切な設定にしてやらないと「弱くなります」。

スレッド

「スレッド」とは、コンピュータの1つのプロセス内での処理単位です。
「スレッドの数」を増やすとその分だけエンジンは並列処理を行って思考します。
変な言い方をすると、「スレッドの数」は利用する「CPU」の数です。 (GUIによっては「スレッド」のことを「CPU」や「コア」という呼び方をします。)
数が多いほどたくさん先読みができます。 (ただし、探索効率は悪くなる。)

効果的な設定は、パソコンの「CPUのコアの数」です。 (一般ユーザー向けのパソコンやスマホなら'2'か'4'になると思います。)

ハッシュテーブル

「ハッシュテーブル」とは、簡単に言うと、エンジンの「ちょっとした学習用メモリ領域」です。
「ハッシュテーブル」に「探索済み局面」とその局面の「最善手」とその手の「得点」などを記録しておくことで、探索を省略したり、「候補手のオーダリング」で効率の良い順番で指し手を計算することができます。

実は、「ハッシュテーブル」のサイズの設定には「コツ」があります。 それは、「2のN乗にする」ことです。
詳しい説明は少し高度なプログラミングの知識が必要なので省略しますが、結論から言うと、エンジンが実際に利用するメモリのサイズは「ユーザーが設定した値の範囲内で、最大の『2のN乗』のサイズ(メガバイト)」となります。
例えば、ユーザーが「600 MB」に設定をしたなら、エンジンは「512 MB」のメモリ領域をテーブル用に確保します。
さらに例えると、ユーザーが「511 MB」に設定をすると、エンジンは「256 MB」のメモリ領域を確保します。

効果的な設定は、パソコンの「全メモリの約半分」です。 あまり多すぎるとコンピュータはハードディスクを使ってメモリの不足分を補うので、とてつもなくパフォーマンスが低下します。
ただしスマホの場合は常時多くのソフトウェアが起動しているので、「全メモリの15%前後」あたりにしておくのがいいと思います。

ちなみにSayuriは、デフォルトの設定が「1 MB」なので必ず再設定してください。

コンピュータの実行手順(UCI用チェスエンジン)

UCI用のコンピュータチェスは以下の手順でゲームを進めます。

  1. ゲームを始める前にエンジンの初期化をします。 (Sayuriの場合は「ハッシュテーブル」を初期化します。)
  2. コンピュータの手番の時...
    1. GUIが「初期配置」と「現在までの手順」をエンジンに伝えます。
    2. GUIは続けて、「持ち時間」と「探索終了条件」とともに「計算せよ」とエンジンに命令します。
    3. エンジンは「現在の情報(その時点での最善手順やスコアなど)」をGUIに伝えながら思考します。
    4. エンジンは計算後、「最善手」と「予測される相手の応手」をGUIに伝えます。
    5. GUIは「最善手」をモニタに表示した後、もしユーザーが「Ponder」機能をオンにしていれば、「予測される相手の応手」に対する次の手を計算するようにエンジンに命令します。
      もちろん予測が当たっていれば持ち時間の節約になりますが、実は予測が外れていても「ハッシュテーブル」に学習結果を記録することができるので無駄ではありません。

エンジンの「分析モード」

実はエンジンには「分析モード」という、通常のゲームとは異なる状態があります。

「分析モード」というのは「現在までの手順を考慮せず、現在の局面のみで思考する」モードです。
エンジンによっては得点の付け方まで変化するものもあるようです。

Sayuriの「分析モード」はとても単純で、「1手ごとにハッシュテーブルを初期化する」というものです。

「分析モード」は「良い意味」でも「悪い意味」でもエンジンの有効的な活用方法です。
一人でポストモーテム(対局後の検討)をしたり、トッププレイヤーの棋譜を研究するのにとても有効的に活用できますが、インターネットチェスなどでの『ソフト指し』にも悪用できてしまいます。 (チェスの対戦サイトによる『冤罪Ban』)


コンピュータチェスは正しく使用すると、ユーザーのチェスライフを豊かなものにしてくれるものです。
しかし、悪用すればユーザー自身をケガし、対戦相手を侮辱し、場合によっては冤罪で無実の人間をチート行為者として傷つけてしまいます。

コンピュータチェスの正しい使用をよろしくお願いします。