チェッカーAIアルゴリズム


7

私はチェッカーゲームのAIを作成しており、できる限り難しくするようにしています。最も困難な難題に取り組むための現在の基準は次のとおりです。

1:ブロックを探す:これは、ピースが脅迫されており、別のピースを後ろに移動して保護できる場合です。次に例を示します。

ブラックムーブ
|W| |W| |W| |W| |
| |W| |W| |W| |W|
|W| | | |W| |W| |
| | | |W| | | | |
| | | | |B| | | |
| |B| | | |B| |B|
|B| |B| |B| |B| |
| |B| |B| |B| |B|

白いブロック
|W| |W| |W| |W| |
| |W| | | |W| |W|
|W| |W| |W| |W| |
| | | |W| | | | |
| | | | |B| | | |
| |B| | | |B| |B|
|B| |B| |B| |B| |
| |B| |B| |B| |B|

2:ピースを危険から遠ざける:脅威にさらされているピースがあり、ピースがそのピースをブロックできない場合、邪魔にならないように移動しようとします。ピースが危険にさらされずに邪魔にならない場合、コンピュータはピースを無視します。

3:コンピュータプレーヤーがキングを所有している場合、ボード上の敵の駒を「狩り」しようとします。キングや他の駒を危険にさらさない動きができない場合、コンピュータはこのルールを無視します。

4:列1または6にあるコンピューターが所有している部分は、横に移動しようとします。ピースが列0または7にある場合、これらのいずれかの列にある間はキャプチャできないため、非常に戦略的な位置にあります。

5:教育を受けたランダムな動きをします。この動きは、動いている駒やボード上の駒を危険にさらすことはありません。

6:上記のいずれも不可能な場合、ランダムに移動します。


この質問は実際には特定の言語に固有のものではありませんが、このアプリがAndroidで作成されていることを考えると、すべての例がJavaである可能性がある場合は、すばらしいでしょう。誰かこのアルゴリズムに改善の余地があると思いますか?チェッカーを上手にプレイできるものはありますか?


(チェッカー固有のメモでは、IIRCが端にあることは、必ずしもそれが有利になるとは限りません。そのようなピースは、1つの動きしか利用できず、トラップとキャプチャーが容易であるため、機動性がありません。)
スティーブンスタドニツキ

2
チェッカーが解かれたゲームであることに気付いていなかった場合に備えて、完全にプレイすると、結果は常に引き分けになります。chessbase.com/newsdetail.asp?newsid=3997
Adam

回答:


15

チェッカープログラムに適したAIを作成しようとしている場合、最初に調べる場所は、Alpha-Betaゲームツリー検索と呼ばれるものです。ショートバージョンは、現在の位置の静的な機能のみを考慮に入れるAIは、特にゲームの何が何で何が起こっているかを単純に理解できないため、特にアーリーからミッドのゲームで問題が発生する可能性があることです。脅威があります。代わりに、あなたがしたいことは、可能なすべての移動を検索し、いくつかの前方移動の応答を返信するアルゴリズムを書くことです(5から10が一般的です)、この移動の各ブランチの最後の位置を評価し、 -ツリーを返信し(「私は前方または後方に何個あるか?」という観点から)、次に、それを最高のチャンスとする移動、つまり、最大化する移動を行います。可能な値。可能な値は、対戦相手のすべての応答全体で可能な最小値として計算されます(言い換えれば、彼らは彼らにとって最善の行動をとると仮定します)、など。これがこのアルゴリズムの理由ですしばしばミニマックスアルゴリズムと呼ばれます。

あなたが話している要素の多く-ピースを横に移動する、ピースを危険から移動するなど-は、ゲームツリー検索の位置評価関数の要素になることがわかります。基本的には、「どちらが先にいくつ先にあるか」という単純な質問をする代わりに、「このポジションの価値は何ですか?」次に、ボードのさまざまな機能(たとえば、ピースが側面にあるかどうか、脆弱かどうかなど)に部分的なピースの点でポイント値を指定します。たとえば、エッジとセンターの違いを決定することができます。ピースはおそらく.1ピースの価値があるので、あなたが後ろの男であるが、余分なエッジピースがあるポジションでは、全体的な価値は-0.9になります。

チェッカーAIの重要な高度な概念の1つは、特に静止検索の概念です。ツリーに6歩下がって、最後の端で対戦相手がキャプチャを行い、(強制)応答が即座に再キャプチャされたとします。残念ながら、位置評価関数は再キャプチャを認識できないため、パリティを取り戻そうとしても、位置は対戦相手のピースアップであると評価します。静止検索は、すべての可能な強制キャプチャが行われるまでエバリュエーターをブランチに強制的に入れ、その位置のみを評価することにより、この問題を解決する試みです。

これはかなり複雑に聞こえるかもしれませんが、見た目よりも簡単だと思います。評価関数を作成すると、ツリー検索は比較的簡単になります。それに適用できるスマートな概念(転置テーブルのようなもの)はたくさんありますが、何かを動作させて、それを改善し続けるのは簡単なはずです。詳細については、主要な用語のほとんどすべて(アルファベータ検索、ミニマックス、静止検索、ゲームツリーなど)で検索することをお勧めします。これらの概念のすべてについての良い情報がウェブ上にたくさんあります。


あなたの答えをありがとう、私は以前にこれを行うことを考えたことがありますが、私の方法はより効果的だといつも思っていましたが、あなたがそれを説明する方法はより効果的ですが多くの作業になるようです。私はチェスゲーム用のAIをすぐに作成するつもりです。あなたのやり方でそれを行うことは、より少ない労力とより効果的だと思います。コンピュータにさまざまな選択肢がたくさんあり、それらがいくつかの選択肢に絞り込まれ、すべてが良い結果をもたらす場合、どのようにしてそれを失うのでしょうか。詳細な回答ありがとうございます!
John

チェッカーよりもミニマックスを実装する方がチェスよりもはるかに簡単であり、実際、チェッカーにミニマックスを実装する方が想像以上に簡単なので、スティーブンの方法を試すことをお勧めします。Connect Fourの(非プルーニングではない)ミニマックスアルゴリズムを数百行で書きました。あなたのスキルを向上させるために時間とエネルギーを費やすことをいとわないなら、それはすべてかなり簡単です。
SomeGuy

1
Stevenの回答以来、MTCSはAlpha / Betaに代わるものとして非常に人気があるようになりました。特にMTCSはいつでもアルゴリズムであるため、これも検討する価値があります。
トビアテサン2017年

@TobiaTesan MCTS(Monte Carlo Tree Search)のことだと思いますか?それは確かですが、MCTSは基本的なAlpha-Betaアルゴリズムよりも実装がかなりトリッキーであり、特にABを最初に実装することをお勧めします。
Steven Stadnicki 2017年

1
@StevenStadnicki心に留めておいてください、私はあなたの優れた答えを批判しようとはしていませんでした(私はそれを支持しました)。特にミニマックスは強力な理論的フレームワークであるため、A / Bのような古典的な方法は常に最初に学ぶ価値があると私は同意します。しかし、MTCSは実際に実装するのが難しくありませんでした。トリッキーな部分IMHOは、低レベル側にビットがかなりある疑似コードバージョンが特にあり(特にGelly 2011など)、グローバル状態[ボード]への副作用を通じてアルゴリズムを表現することを好み、再帰呼び出しがポップされます。
トビアテサン2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.