敵対的な検索問題のためにミニマックスツリーを検討してください。たとえば、次の図では(アルファベータ剪定):
木をマークするとき 値がボトムアップの場合、最初にノードをトラバースし、B. \ max = 3を割り当てます。次に、とをこの順序でトラバースします。これにより、ます。
しかし、なぜでしょうか。その値の用途は何ですか?
敵対的な検索問題のためにミニマックスツリーを検討してください。たとえば、次の図では(アルファベータ剪定):
木をマークするとき 値がボトムアップの場合、最初にノードをトラバースし、B. \ max = 3を割り当てます。次に、とをこの順序でトラバースします。これにより、ます。
しかし、なぜでしょうか。その値の用途は何ですか?
回答:
この数値(実際には正しい)は、ミニマックスツリーのアルファ-ベータ剪定アルゴリズムの説明で使用されます。アルファベータ剪定は、敵対的探索問題でミニマックスツリーの一部を剪定するために使用される方法です。三目並べゲームのコンテキストでは、ミニマックスツリーは、プレーヤーの動きが最適であると想定して、コンピューターがすべての可能なゲームボード(xとoの構成)のスペースを検索できるようにするためのものです。これにより、コンピューターは最高の結果をもたらす動きを思い付くことができます(これが、コンピューター上の接続4ゲームが非常に勝つことが難しい理由です!)。より完全な説明については、スチュアートとノーヴィッグによる「AI現代のアプローチ」を強くお勧めします(第2版のpg。162-170 ish)。
アルゴリズムの混乱を解消しました。アルファベータ剪定は、ミニマックスアルゴリズムがどのように機能するかに基づいて、サブツリーの拡張を回避しようとします。トップレベルのmaxノードは、そのすべての子の中で最大の値をとることがわかっています。したがって、ノードは値見つけます。これまでのところ、これは親に渡すことをいとわない最大値なので、この値をMAXスロットに入れます。次に見つけます。はMINノードであることを忘れないでください。したがって、は親に渡す値を最小化したいので、MAXスロットに値を保持します。再び。ときそのすべての子を検索している、それはより低い最大バインド(知っている)解とそのサブツリーの最小上限()解で、これらの値をMIN()とMAX()で維持します([3、3]のように)。
注:図に示されている最小値と最大値は、サブツリーの最小値と最大値ではありません。これらは(かなり混乱してラベル付けされています)サブツリーの解のアルファ-ベータ境界です(これは敵対的な検索問題であることを忘れないでください)。
次に、ノードに移動します。ここでは、最初の位置でに出会います。ノード、サブツリーから最も低い値を選択する必要があるため、ノードがすでにより大きい値を見つけたため、親がその値を選択しないことを認識しています。したがって、残りのサブツリーを枝刈りして進むことができます。
最後に、特定の質問に答えます。なぜ .min = 3なのですか?値(最大このノードにおける溶液の下限)と(上部このノードでの溶液の結合最低)刈り込みを行うために各ノードで維持されます。これらの値は、ノード(またはそのサブツリー)からの値がソリューションの一部である可能性のあるケースを制限します。
この例では、しかし、役割を果たして、より複雑な例を見てみてください(つまり、樹木を、高さ> 3で)のようには見えない、この1とあなたがそれを理解することができるかどうかを確認します。
私はここでミニマックスまたはアルファベータ剪定を正義にすることはできません(主に私が何年もそれらを使用していないため)、これを本当に理解したい場合は、スチュアートとノーヴィッグのようなAIに関する本(ウィキペディアのページにも驚くほど視覚化されていません)。