コンピュータゲームのアルゴリズム(敵対的探索)

I.はじめに

ヒューマン コンピューター ゲームは人工知能の重要な分野であり、人々はこの分野を探求する過程で多くの研究成果を上げてきましたが、ミニマックス アルゴリズム (minimax) は最も基本的なアルゴリズムであり、1950 年にシャノンによって正式に確立されまし。提案する。アルファベータ枝刈りの本質は、ミニマックス アルゴリズムに基づいて改良された方法です。Knuth らは 1975 年にこのアルゴリズムを最適化し、負の最大値 (negamax)の概念を提案しました。この概念の原理は本質的に最小化最大値アルゴリズムと同じですが、システムが最大値を区別する必要はありません。最小値にすると、アルゴリズムがより均一になります。さらに、Knuth らもアルファ - ベータ 枝刈りアルゴリズムの検索効率について詳細な研究を行い、パールも1982 年にアルファ - ベータ 枝刈り原理の最適性を証明しました。

2 番目に、最大値と最小値のアルゴリズム ( Minimax Search )

1. ミニマックスアルゴリズム

マンマシンゲームでは、双方がターンベースでチェスをプレイし、一方が可能なすべての手の中から特定の選択を行った後に相手が取るであろう手を検討し、自分にとって最も有利な手を選択します。 。このゲーム プロセスはゲーム ツリーを構成し、両者はゲーム ツリー内を継続的に検索し、チェスをプレイするのに最も有利な子ノードを選択します。探索の際、最大値を取る側をmax、最小値を取る側をminと呼びます。max はチェスをプレイするために常に最大の値を持つ子ノードを選択しますが、min はその逆を行います。これがミニマックス アルゴリズムの核となる考え方です。

  1. ノードが終端ノードの場合: 評価関数を適用して評価します。

  1. ノードが最大ノードの場合: 各子ノードの値を検索し、最大の子ノード値をノードの値として使用します。

  1. ノードが最小ノードの場合: 各子ノードの値を見つけて、最小の子ノード値をノードの値として使用します。

2. 評価機能

評価関数は、ゲームツリーにおいて状況ごとに評価を与え、現在の状況を判断するために使用されます。従来のボードゲーム知能システムでは、評価関数は一般に人為的に指定され、ボードゲーム知能のレベルに決定的な役割を果たします。

評価関数の形式は固定されておらず、一般にその入力は状況の情報であり、出力は対応する状況の良し悪しの程度を示す値である。ミニマックス アルゴリズムを説明するために、たとえば、三目並べの評価関数は次のように規定されます。プレイヤー X の可能な行、列、および斜線の数から、可能な行、列、および斜線の数を差し引いたものです。プレイヤーOの場合。

3. a-b 枝刈り検索

3.1. アルファ-ベータ枝刈りの原理

ミニマックス アルゴリズムの最大の欠点はデータの冗長性が生じることであり、この冗長性には 2 つの状況があります: ① 最大値の冗長性、② 最小値の冗長性。同様に、アルファ プルーニングは最大値の冗長性問題を解決するために使用され、ベータ プルーニングは最小値の冗長性問題を解決するために使用され、完全なアルファ-ベータ プルーニング アルゴリズムを構成します。次に、最大冗長性と最小冗長性、および特定の枝刈りプロセスを簡単に紹介します。

  • アルファ枝刈り:最大値の冗長性 図に示すように、これはゲーム ツリーの特定の部分であり、ノードの下のデータはノードの値であり、ノード B の値は 20、ノード D の値は 15 です。ここで、C は最小値を取る min ノードなので、ノード C の値は 15 以下になります。ノード A は最大値 max を取るノードなので、A は次の値しか取得できません。 B、つまり C を検索する必要がなくなり、他の子ノード E と F の値でノード A の値を取得できます。このように、ノード D の後続の兄弟ノードを減算することを、アルファ枝刈りと呼びます。

  • ベータ枝刈り:最小値の冗長性 図に示すように、これもゲームツリーの一部であり、ノード B の値は 10、ノード D の値は 19 です。したがって、C の値は 19 以上になります。ノード A は最小値を持つ最小ノードであるため、A の値は B の値 10 のみを取ることができます。つまり、B の値は 10 でなければなりません。ノードCの子ノードEとFの値を求めることでノードAの値を導き出すことができます。このように、ノード D の後継兄弟ノードを減算することをベータ プルーニングと呼びます。

3.2. α-β 枝刈りの実装

  • alpha : 現在のノードの各子ノードの最大値を記録するために MAX ラウンドで更新され、子ノードが枝刈りされた場合は枝刈り部分が捨てられた後の最大値になります。

  • beta: 在MIN轮次会被更新,用来记录当前节点的各个子节点中的最小值,如果子节点被剪枝了,那就是抛去被裁剪部分之后的最小值。

  • 剪枝条件:α>=β

  • 初始化:是递归调用,每一个节点的alpha的初始值均是负无穷,因为alpha要负责记录最大值;每一个节点的beta的初始值均是正无穷,因为beta要负责记录最小值。

最清晰易懂的MinMax算法和Alpha-Beta剪枝详解

3.3 α-β search

  • The α-value of a MAX-node is set to the current largest final backed-up value of itssuccessors. That is, you can not back up a node until you have finished looking at itschildren.

  • The β-value of a MIN-node is set to the current smallest final backed-up value of itssuccessors.

  • α cut-off – search is discontinued below a MIN-node whose β value is less than or equal to the α value of any of its MAX-node ancestors.

  • β cut-off – search is discontinued below a MAX-node whose α value is greater than or equal to the β value of any of its MIN-node ancestors.

References

https://www.w3cschoool.com/adversarial-search

Alpha-beta剪枝 -机器之心

Minimax Search以及alpha-beta剪枝

おすすめ

転載: blog.csdn.net/m0_64768308/article/details/129472644