2010-12-30 9 views
3

私はPentagoゲームをC#で開発しようとしています。Pentago AIアルゴリズムの実装方法

今私はちょうどうまく動作する2人のプレーヤーモードを持っています。

問題は、私は(コンピュータに対して)一人のプレイヤーモードをしたいということですが、残念ながら、ミニマックス/ negamaxのすべての実装は、ゲームピースを動かし大理石を置き、各「移動」のために計算の事(、のためのものです)。

ブチンPentago、すべてのプレーヤーは、私は両方の大理石を置く部分&を回転させる実装する方法を見つけ出すことはなかったもの(場所大理石、および内部ボードの1を回転させる)

を行う必要があります私はこれで私を導く人が大好きです。

ゲームに慣れていない場合は、linkをゲームに追加してください。

誰かが欲しいのであれば、関連性がある場合は私のコードをどこかにアップロードできます。

は、単一の法的な動きが二つのサブ動きで構成されている場合、ゲームアルゴリズムの目的のために、あなたの「移動」は、単に最初の項目は、大理石の配置であるタプルである

+0

これまで何をしていますか?特定の問題がありますか? –

+0

私がこれまで行ってきたことについて - 私はミニマックスの実装を開始しようとしましたが、私は "**" **移動**を表現する方法を理解していませんでした。 ' – itsho

答えて

1

事前にどうもありがとうございましたし、 2番目の項目はボードの回転です。例:

var marbleMove = new MarbleMove(fromRow, fromCol, toRow, toCol); 
var boardRotation = new BoardRotation(subBoard, rotationDirection); 
var move = new Tuple<MarblMove, BoardRotation>(marbleMove, boardRotation); 

通常、ゲームの再生アルゴリズムでは、特定の位置で可能なすべての動きを列挙する必要があります。この場合、サブ移動のの可能なすべてのペアを列挙する必要があります。このリストを手元に置くことで、常時コンピュータゲームのプレイ方法を使用することができます。

+0

私は にお世話になっていると思いますが、とにかく、すべての可能なペアをインスタンス化する必要がありますか?それは非常に遅くなるだろうか? – itsho

+1

はい、ゲームの速度が遅くなることがあり、ゲームのアルゴリズムはしばしば指数関数的なゲーム位置の爆発に対処する必要があります。この問題を解決するための最初の友人は転置テーブルです:http://en.wikipedia.org/wiki/Transposition_table –

1

上記のタップルを試してみましょうが、実際には各プレイヤーに2つの独立した移動をさせてもらいたいので、2回続けて続けます。これにより、移動順序を簡単にすることができますが、使用しているアルゴリズムに応じて検索アルゴリズムが複雑になる可能性があります。

UCTのようなアルゴリズム(簡単な実装ではミニマックスより優れている可能性が高い)では、2つの動きに分割する方が効率的です。なぜならアルゴリズムはまずプレースメントの動きを把握してから、 (グーグルUCTはあまり魅力的ではありません。オリジナルの研究論文はあまり洞察力がありませんが、このページは良いかもしれません:http://senseis.xmp.net/?UCT

+0

UCTは私に "Monte-Carlo"のように見えます。そうでなければ、私はそれを得ていませんでした。あなたはUCTアルゴリズムの短い例を教えてください。 – itsho

+0

モンテカルロは多くのことを意味することができます。 UCTは、モンテカルロツリー探索(MCTS)アルゴリズムのより広いクラスに属しています。 UCTには探査ルールがあり、次にサンプルする場所を教えてくれます。通常、UCTツリーはサンプリングされる領域で成長し、UCTツリーの終わりからゲームの終わりまでランダムまたは疑似ランダムサンプルが実行されます。これにより、複雑な評価関数が不要になります。 –

関連する問題