ゲームのconnect6wikiを表現したいと思います(おそらく述語stone(P、X、Y)、ここでPはプレーヤー、X、Yは座標です)。また、問題を解決するために(対戦相手を作るために)優れたヒューリスティックを使用したいと思います。PrologのゲームAIに関する記事のヒントを教えてください。ありがとう
2 に答える
おそらくhttp://en.wikipedia.org/wiki/Minimaxゲームツリーを調べたいと思うでしょう。検索を最適化するために、考えられるすべての動きを考慮したくない場合があります。たぶん、既存のピースとそれに沿って、そこから6つ以下のスペースで移動するだけです。
次に、 http://en.wikipedia.org/wiki/Evaluation_functionが必要です。おそらく、進行中の行全体で「行を完了するのにどれだけ近いか」にスコアを割り当てるようなものです。
ゲームツリーの構築と最適化は、より機械的なプロセスです。評価関数を作成することは、AIの対戦相手に独特の味を与える楽しい部分です。
グーグルで「ミニマックスゲームツリープロローグ」を検索すると、すばらしいパワーポイントが見つかりました: http ://staff.science.uva.nl/~arnoud/education/ZSB/2009/
有限ボードにConnect6を実装している場合、このゲームの可能な表現は、最初はバインドされていない変数のリストのリストになります。変数をアトムblack
またはの1つと統合することにより、「石を配置」しますwhite
。P
次に、を使用して位置がまだ空であるかどうかをテストできますvar(P)
。stone/3
この表現は、用語のリストよりも操作がはるかに高速である必要があります。Connect6では、石を取り除くことができないため、これは機能します。
ヒューリスティックとは、ミニマックス、ネガマックス、またはアルファベータ検索に適した評価関数を意味すると思います。ゲームのルールを考慮して、各プレーヤーについて、長さ5の行数を数え、それらの5をスコアリングし、長さ44の行数をスコアリングすることをお勧めします。これにより2つのスコアS1とS2が得られます。S1からS2を引くと、プレーヤー1の相対的な利点が得られます。次に、これらを[-1,1]の範囲に正規化する方法を見つけるか、ゲームが無限大からマイナス無限大を超えている状況をスコアリングします。(Prologでそれらすべてを表現する方法は演習として残されています。)