Artificial-intelligence-with-python-gaming
Pythonを使用したAI –ゲーム
ゲームは戦略でプレイされます。 すべてのプレイヤーまたはチームはゲームを開始する前に戦略を立て、ゲームの現在の状況に応じて新しい戦略を変更または構築する必要があります。
検索アルゴリズム
上記と同じ戦略のコンピューターゲームも検討する必要があります。 検索アルゴリズムは、コンピューターゲームの戦略を理解するものであることに注意してください。
使い方
検索アルゴリズムの目標は、最終的な目的地に到達して勝つことができるように、最適な動きのセットを見つけることです。 これらのアルゴリズムは、ゲームごとに異なる勝利条件を使用して、最適な動きを見つけます。
コンピューターゲームをツリーとして視覚化します。 ツリーにはノードがあることがわかっています。 ルートから始めて、最終的な勝者ノードに到達できますが、最適な動きがあります。 それが検索アルゴリズムの仕事です。 そのようなツリーのすべてのノードは、将来の状態を表します。 検索アルゴリズムはこのツリーを検索して、ゲームの各ステップまたはノードで決定を下します。
組み合わせ検索
検索アルゴリズムを使用する主な欠点は、本質的に網羅的であるということです。そのため、検索スペース全体を探索して、リソースの浪費につながる解決策を見つけます。 これらのアルゴリズムが最終的なソリューションを見つけるために検索スペース全体を検索する必要がある場合は、さらに面倒です。
この種の問題を排除するために、ヒューリスティックを使用して検索スペースを探索し、起こりうる誤った動きを排除することでサイズを縮小する組み合わせ検索を使用できます。 したがって、このようなアルゴリズムはリソースを節約できます。 ヒューリスティックを使用してスペースを検索し、リソースを節約するアルゴリズムの一部は、ここで説明されています-
ミニマックスアルゴリズム
これは、組み合わせ検索で使用される戦略であり、ヒューリスティックを使用して検索戦略を高速化します。 ミニマックス戦略の概念は、各プレイヤーが対戦相手の次の動きを予測し、その機能を最小化しようとする2人のプレイヤーゲームの例で理解できます。 また、勝つために、プレイヤーは常に現在の状況に基づいて独自の機能を最大化しようとします。
ヒューリスティックは、ミニマックスのような戦略で重要な役割を果たします。 ツリーのすべてのノードには、それに関連付けられたヒューリスティック関数があります。 そのヒューリスティックに基づいて、最もメリットのあるノードに向かって移動することを決定します。
アルファベータプルーニング
Minimaxアルゴリズムの主な問題は、関係のないツリーの部分を探索でき、リソースの浪費につながることです。 したがって、ツリーのどの部分が関連性があり、どの部分が無関係であるかを決定し、無関係な部分を未探索のままにする戦略が必要です。 アルファベータ枝刈りは、そのような種類の戦略の1つです。
Alpha-Betaプルーニングアルゴリズムの主な目標は、解のないツリーの部分の検索を回避することです。 アルファベータ枝刈りの主な概念は、 Alpha という最大下限と、 Beta という最小上限という2つの境界を使用することです。 これらの2つのパラメーターは、可能なソリューションのセットを制限する値です。 現在のノードの値をアルファおよびベータパラメータの値と比較して、ツリーの解のある部分に移動し、残りを破棄できるようにします。
Negamaxアルゴリズム
このアルゴリズムはMinimaxアルゴリズムと違いはありませんが、より洗練された実装をしています。 Minimaxアルゴリズムを使用する主な欠点は、2つの異なるヒューリスティック関数を定義する必要があることです。 これらのヒューリスティックの関係は、あるプレイヤーにとってゲームの状態が良いほど、他のプレイヤーにとっては悪いということです。 Negamaxアルゴリズムでは、1つのヒューリスティック関数を使用して、2つのヒューリスティック関数の同じ作業が行われます。
ゲームをプレイするためのボットの構築
AIで2つのプレイヤーゲームをプレイするボットを構築するには、 easyAI ライブラリをインストールする必要があります。 これは、2プレーヤーゲームを構築するためのすべての機能を提供する人工知能フレームワークです。 あなたは、次のコマンドの助けを借りてそれをダウンロードすることができます-
最後のコイン立ちをするボット
このゲームでは、コインの山があります。 各プレイヤーは、その山からいくつかのコインを取る必要があります。 このゲームの目標は、山の最後のコインを取るのを避けることです。 easyAI ライブラリーの TwoPlayersGame クラスから継承した LastCoinStanding クラスを使用します。 次のコードは、このゲームのPythonコードを示しています-
示されているように必要なパッケージをインポートします-
今、ゲームのすべての操作を処理するために TwoPlayerGame クラスからクラスを継承します-
次に、プレーヤーとゲームを開始するプレーヤーを定義します。
次に、ゲーム内のコインの数を定義します。ここでは、ゲームに15個のコインを使用しています。
プレーヤーが手札に入れることができるコインの最大数を定義します。
次のコードに示すように、定義する特定の事項がいくつかあります。 可能な動きを定義します。
コインの除去を定義する
誰が最後のコインを取ったかを定義します。
ゲームを停止するタイミング、つまり誰かが勝つタイミングを定義します。
スコアの計算方法を定義します。
パイルに残っているコインの数を定義します。
次のコードブロックでゲームを解く-
誰がゲームを開始するかを決定する
次の出力とこのゲームの簡単なプレイを見つけることができます-
チックタックトーをプレイするボット
三目並べは非常に親しみやすく、最も人気のあるゲームの1つです。 Pythonで easyAI ライブラリを使用してこのゲームを作成しましょう。 次のコードは、このゲームのPythonコードです-
示されているようにパッケージをインポートします-
今、プレイヤーとゲームを開始しようとしているプレイヤーを定義します-
ボードの種類を定義します-
今、次のように定義するいくつかの特定のものがあります-
可能な動きを定義する
プレーヤーの動きを定義する-
AIを後押しするには、プレイヤーがいつ動きをするかを定義します-
対戦相手が3人並んでいるという敗北条件を定義する
ゲームの終了のチェックを定義する
ゲーム内のプレイヤーの現在の位置を表示する
スコアを計算します。
アルゴリズムを定義し、ゲームを開始する主な方法を定義します-
次の出力とこのゲームの簡単なプレイを見ることができます-