web-dev-qa-db-ja.com

五目並べ(チックタックトーのバリエーション)のAI戦略

私は Gomok の変形であるゲームを書いています。基本的に、巨大なボード上のティックタックトゥ。

誰かがゲームの優れたAI戦略を知っているかどうか疑問に思います。私の現在の実装は非常に愚かで、時間がかかります(O(n ^ 3)、移動するのに約1〜2秒):

-(void) moveAI {
    //check if the enemy is trying to make a line horizontally, vertically, or diagonally
    //O(n^3 * 3)
    [self checkEnemies];

    //check if we can make a line horizontally, vertically, or diagonally
    //O(n^3 * 3)
    [self checkIfWeCanMakeALine];

    //otherwise just put the piece randomly
    [self put randomly];
}

編集:フィードバックをありがとう!私はあなたの答えを試し、私が何か改善できるかどうか皆さんに知らせます。

14
Enrico Susatyo

五目並べについては、勝利戦略はすでに見つかっています。この論文を参照してください: L。Victor Allis、H。J。van den Herik、M。P。H.Huntjens。Go-MokuandThreat-Space Search 。私が自分のプログラムを書いていたとき、それは私を大いに助けました。このようにして、対戦相手を攻撃し、勝利の組み合わせを見つけるのに非常に優れたプログラムを書くことができます。

20
TMS

このようなゲームのAIを作成するための従来のかなり効果的な戦略は、典型的なツリー検索戦略です。つまり、各ボードの状態はグラフ内のノードを形成し、有向エッジは各ノードと状態の間に配置され、1回の移動で発生する可能性があります。このようにして、ルートボードが空のノードであるツリーが構築されます。次に、ツリーを巧妙な方法でトラバースして、「良好な」状態のように見えるものを見つけます。 「良好な」状態は通常、いくつかの巧妙なヒューリスティックを使用する評価関数によって測定されます。明らかに、ツリー内のすべてのノードにアクセスする必要はありません。これは大変な作業です。あなたはただ何か賢いものが欲しいだけです。

事前に計算されたアーリーゲームとエンドゲームを追加して、これらのシナリオを高速化し、ミッドゲーム用に十分に最適化されたツリートラバーサルヒューリスティックに依存することができます。

このようなツリートラバーサルアルゴリズムの実際の名前は「ミニマックス」アルゴリズムです。ウィキペディアで探すと、かなりまともな資料がたくさん表示されます。アルゴリズムの効率を高める方法はいくつかありますが、その中で最も注目すべきものはアルファベータ法です。必ずそれを確認してください。コネクトフォーのヒューリスティックを見て、それらをゲームに適用する方法を決定することをお勧めします。たとえば、ボードの状態を評価するための適切なヒューリスティックは、継続可能な2ラン、3ラン、および4ランの数をカウントし、それらをスコアに重み付けすることです。 (たとえば、2ランごとに1ポイントの価値があり、3ランごとに10ポイントの価値があり、4ランごとに1000ポイントの価値があります)

別の最適化戦略は、ミニマックスアルゴリズムがより多くを検索する場所に優先順位を付けるヒューリスティックを開発することです。通常、ボード評価関数のある種の確実性を推定します。

この戦略を使用すると、同じ時間でそれほど愚かではないAIを取得できるはずです。ただし、実際には、このような「単純な」ゲームであっても、本当に優れたAIの構築には多大な労力が必要であり、スマートな動きを邪魔しないようにするために10秒以上かかる場合があります。一方、人間の対戦相手が考えるのに忙しいときに、ツリーを通過するトラバーサルを事前に計算するなど、巧妙なプログラミングのトリックがいくつかあります。ねえ、人間はコンピュータがそうしている間に考えるようになります。フェアはフェアです!

私はいくつかの助けをしてきたと思います。幸運を!楽しいプロジェクトです。

15
Kaganar

私はしばらくの間、同じプログラムのアルゴリズムを作成しようとしています。

もちろん、あなたのプログラムが最初にすべきことは、5を形成して勝つ方法があるかどうかを確認することです。ない場合は、次に、対戦相手がそれを実行できるかどうかを確認し、実行できる場合は防御します。

自分で五目並べをどれくらいプレイしましたか?あなたは基本をどれだけよく理解していますか?

さて、次のステップは考えることです:私たちが勝つことができる位置にどのように到達することができますか?明らかに、勝つためには4行続けなければなりません。ただし、次のように4つ並べるだけです。

__________
____XOOOO_
__________

その後、対戦相手はそれを閉じることができます。

しかし、次のように「オープンフォー」を形成するとします。

__________
____OOOO__
__________

そうすれば、対戦相手は両側を閉じることができず、あなたは勝つことができます。したがって、オープン4を形成することは、勝つための1つの方法です。さて、質問が来ます:どうすればオープンフォーを形成できますか?確かに、次のように「オープンスリー」を形成すると、次のようになります。

__________
____OOO___
__________

その後、対戦相手は私たちをブロックすることができます:

___________
____XOOO___
___________

そして、私たちは最初に戻っています。

勝つために、2つのオープンスリーを同時に形成することができます。

____________
____OOO_____
_____O______
____O_______

これで、対戦相手がそれらの1つをブロックした場合、もう1つを使用してオープン4を形成できます。

____________
_______O____
___XOOO_____
_____O______
____O_______
____________

そして勝つ:

________O___
_______O____
___XOOO_____
_____O______
____O_______
___X________

五目並べでは、これは3x3と呼ばれ、同時に2つのオープンスリーを作成します。

3つ両方が開いている必要があることに注意してください。理由を理解できますか?

勝つ方法は他にもあります。

4x3:勝者の動きはわかりますか?それはなぜ勝っているのですか?

____________
__XOOO______
__XXXO______
____OX______
____________

4x4:勝利の動きを見ますか?

____________
__XOOO______
__XXXO______
__OXOX______
___O________
__X_________

これらはゲームの基本にすぎません。戦術を知っていると、AIの構築方法を考えるのに役立つため、原則をハードコーディングできます。

当然、これはほんの始まりにすぎません。これを実装して、フィードバックをいただければ幸いです。

私はJavaでプログラムを書こうとしています。プレイテストできるように、私が実行したコードを確認しますか?まだあまり良くありませんが、そこから新しいアイデアを得ることができます。コメントと変数名はエストニア語で書かれていますが、理解するのは非常に難しいかもしれません。 :(

7
Rauni Lillemets

五目並べは解決しましたが、オープンポジションと限られたリソースでプレイすると解決しません。

私は Hewer gomok プログラムと Gomocup オーガナイザーの作者であり、優れた五目並べAIを作成するには非常に長い時間がかかると言えます。連珠はもっと複雑です。 Gomocup インターフェイスを使用してジョブを簡略化し、「AI」のみを書き込むことができます。

5
Tomas Kubes

私は五目並べプレーヤーを一度作成しましたが、アルファベータ剪定を使用し、各プレーヤーが持っていたハーフオープンとフルオープンの2、3、および4の数に応じて各ポジションにスコアを与えることは非常に成功しました。

これはn ^ 3ではありません。最新の動きが対戦相手のラインのいずれかを閉じるかどうかを確認し、それがあなたのラインの一部を延長するかどうかを確認し、それに応じてスコアを変更します。

さらに上手にプレイする必要がある場合は、チェスコンピューターのテクニックをいくつか調べます。たとえば、検索時に最初に「キラームーブ」(どのムーブがハイスコアを出したか、他のポジションで完全に勝ったかを覚えている)を試すと、ツリー検索の効率が大幅に向上します。アルファベータ剪定では、最初に想定された最善の動きを試すことが重要です。

プレーヤーがいる場合は、さまざまなバージョンを相互にプレイして、さまざまな要素(2、3、4、オープン、ハーフオープンなど)のスコアが最適かどうかを確認する必要があります。

5
Gurgeh