このリポジトリには、 Minimax 、 Alpha-Beta プルーニング、および静止検索アルゴリズムを使用したチェス エンジンの実装が含まれています。コーディングには、Docker コンテナ内の Jupyter ノートブックが使用されます。すべての Jupyter Notebook は、docker イメージの形式でも利用できます。
詳細な分析については、プロジェクトの文書を確認してください。
docker pull codewithnk/chess-engine-using-python:latest
docker run -p 8888:8888 -v $( pwd ) codewithnk/chess-engine-using-python:latest
minmax でチェスをプレイするチェスの核心。 Minmax は通常、黒のピースを MAX、白のピースを MIN に関連付け、常に白の観点から評価します。
Minmax アルゴリズムは、ゲーム理論における敵対的検索アルゴリズムです。ゲーム ツリーを利用しており、2 人のプレイヤーの MIN と MAX が含まれています。両方のプレイヤーは他のプレイヤーのアクションを無効にしようとします。 Max は結果を最大化しようとするのに対し、MIN は結果を最小化しようとします。両方のプレイヤーが交互にプレイしますが、両者が最適にプレイしているという前提の下にあります。最適なプレイとは、両方のプレイヤーがルールに従ってプレイしていることを意味します。つまり、MIN は結果を最小化し、MAX は結果を最大化します。
minmax アルゴリズムは、深さ優先検索アプローチを利用して結果を見つけます。さらに、バックトラッキングと再帰も利用します。アルゴリズムは終端ノードまで移動し、すべての子の値を比較しながらバックトラックします。誰の順番に基づいて最小値または最大値が選択されます。次に、値を親に伝播します。静的評価関数を使用して、各リーフ ノードの値を決定します。ゼロサムゲームの利点を活かしています。
Minmax を使用したチェス エンジン
Minmax はゲーム ツリーで深さ優先検索 (DFS) を使用するため、minmax アルゴリズムの時間計算量はO(b**m)になります。ここで、 b はゲーム ツリーの分岐係数、m はツリーの最大深さです。
minmax アルゴリズムの空間計算量も DFS と同様で、 O(bm)です。ここで、 b はゲーム ツリーの分岐係数、m はツリーの最大深さです。
Minmax アルゴリズムが完了しました。有限探索ツリー内に解が存在する場合、必ずそれが見つかります。
Minmax アルゴリズムは、両方の対戦相手が最適にプレイしている場合に最適です。
minmax アルゴリズムは、いくつかのブランチを枝刈りすることで最適化できます。剪定された枝は結果に影響を与えない枝です。時間の複雑さが改善されます。このバージョンの minmax は、アルファベータ プルーニングを備えた minmax として知られています。アルファベータアルゴリズムとも呼ばれます。
アルファ-ベータ プルーニングには、アルファとベータの 2 つの値があります。以下に、アルファ版とベータ版について考慮すべき点をいくつか示します。
バックトラック中は、アルファ値とベータ値ではなく、ノード値のみが親に渡されます。
アルファベータ枝刈りの条件:
α >= β
アルファベータ アルゴリズムの有効性は、走査の順序に大きく依存します。それは時間と空間の複雑さにおいて重要な役割を果たします。
場合によっては、ゲーム ツリーからノードやサブツリーが削除されないことがあります。この場合、最適な手はゲーム ツリーの右側のサブツリーで発生します。これにより、時間の複雑さが増加します。
この場合、最大数のノードとサブツリーが枝刈りされます。最良の動きは左側のサブツリーで発生します。それは時間と空間の複雑さを軽減します。
アルファベータ プルーニングを使用したチェス エンジン
アルファ ベータ アルゴリズムは、ゲーム ツリーで深さ優先検索 (DFS) も使用します。
アルファベータアルゴリズムが完成しました。有限探索ツリー内に解が存在する場合、必ずそれが見つかります。
アルファ-ベータ アルゴリズムは、両方の対戦相手が最適にプレイしている場合に最適です。
静止検索は、最小-最大によるアルファ-ベータ プルーニングに加えて変更を加えたものです。静寂とは静かという意味です。この検索では静かな手のみを評価します。つまり、一定の深度を超えると、キャプチャ移動のみを使用して次の移動を計算します。静止検索により、地平線効果を回避できます。
地平線効果は、特定の深さまでしか検索しない場合に発生しますが、さらに 1 レベル深く検索すると、移動によるスコアが少なくなる可能性があります。静止検索ではこれを防ぐためにキャプチャ移動のみを使用します。静止検索では、さまざまなレベルで分岐因子も削減されるため、アルゴリズムが高速になります。
静止検索アルゴリズムは、ゲーム ツリーで深さ優先検索 (DFS) も使用します。
静止検索アルゴリズムが完了しました。有限探索ツリー内に解が存在する場合、必ずそれが見つかります。
静止検索アルゴリズムは、両方の対戦相手が最適にプレイしている場合に最適です。