web-dev-qa-db-ja.com

ゲームAIでのモンテカルロツリー検索

コネクト5のゲームにMCTSを実装することに非常に混乱しています。 Wikipedia によると:

選択:ルートRから開始し、連続する子ノードをリーフノードLまで選択します。

AIの番だとしましょう。現在のボードの状態は[〜#〜] r [〜#〜]です。 [〜#〜] r [〜#〜]の子ノードがあってはなりませんよね?次に、「リーフノードまで連続する子ノード[〜#〜] l [〜#〜]」をどのように選択できますか? Rの子ノードがないためです。子ノード[〜#〜] l [〜#〜]は、AIが実行できるすべての単一の移動を意味します[〜#〜] r [〜#〜]

その子ノード[〜#〜] l [〜#〜]がゲームの状態であり、AIとプレイヤーは、勝つまでランダムに動き、最大[〜#〜] r [〜#〜]まで逆伝播します。バックプロパゲーション後はどうしますか?

子ノード[〜#〜] l [〜#〜]を選択する方法がわかりません。その前でも、[〜#〜] l [〜#〜]がどのように作成されるのかわかりません。最初のステップで子ノードを「選択」しているように見えるため、非常に奇妙に聞こえます。

これを単純化できる人がいれば素晴らしいと思います。ありがとう。

2
Dashadower

最初は、ルートRという1つのノードしかありません。これは、最初のラウンド選択ステップのリーフノードLでもあります。

Rの子ノードがあってはなりませんよね?次に、「リーフノードLまでの連続する子ノードを選択する」にはどうすればよいでしょうか。

L = Rを選択するだけです(Wikipediaの記事にはいくつかの欠陥があると思います。リーフノードを選択する必要はありませんが、まだ探索されていない子が残っているノードを選択する必要があります)。

ゲームの状態であるその子ノードLがAIもプレイヤーも勝利でない場合、勝つまでランダムに動き、Rに逆伝播します。

いいえ、ウィキペディアの記事によると、最初に拡張手順を実行する必要があります。 Lの探索されていない子のいずれかをノードCとして選択します。ツリーを展開して任意の場所に移動する必要があります。

バックプロパゲーション後はどうしますか?

時間がなくなっていない限り、このプロセスを繰り返します。

子ノードLを選択する方法がわかりません

それがアルゴリズムの本当の鍵です。探索されていない子がいくつかあるノードに到達するまで、ルートからツリーをトラバースする必要があります。ステップごとに、ノードを選択して、ツリーの幅と深さのバランスをとる必要があります。その目的のためにUCT式を試してください。

Connect 5の優れた評価関数を定義することはそれほど難しくはないと思います。その場合、モンテカルロツリー検索はおそらくタスクにとって最も効率的なアルゴリズムではありません。

2
COME FROM