0

誰でも明確な方法を教えてください(私はどこにも明確な例が見つからないため)MCTSアルゴリズムは2番目のプレーヤーを繰り返します。モンテカルロツリー検索交互

私はちょうどそれが例えばP1の移動ごとに再生されているように見えると思われるすべて。 私は1つのエージェントの手順を理解していますが、P2をどこに配置するのかわからないことはありません。

は基本的に私が期待する:各ITER用

選択ノードPlayer1が Player1を拡大

選択ノードPlayer2 展開するプレーヤー2

展開

次 backpropogate iter

これは正しいですか?誰かがそれを示すいくつかの擬似コードを書き留めてください。反復的にも再帰的にも気にしない。

ありがとうございました。

+0

さらなるアドバイスをいただき、ありがとうございます。もう一度考えてみましょう。 – progan01

+0

私はまだここでは確信していません。私は繰り返しが、このように見なければならないことを考えていた。各\t ITER player1ため は \tプレイヤー1は \t player2を拡張選択 \t player2を選択 \t backpropogate 次ITER – progan01

答えて

1

トリックはバックプロパゲーション部にあり、この位置に移動したプレイヤーの視点から "wins"変数を更新します。

Code for MCTS

UCT機能の下に注意してください、特別コメント:あなたが関数呼び出しに従うならば

#Backpropagate 
    while node != None: # backpropagate from the expanded node and work back to the root node 
     node.Update(state.GetResult(node.playerJustMoved)) # state is terminal. Update node with result from POV of node.playerJustMoved 
     node = node.parentNode 

、あなたはvisit変数は常に更新されて実現します。しかし、winsはありません。

+0

があなたをありがとう \t展開を拡大します応答。私はすぐにコードを見直します。しかし、私はまだ選択の側面を取得しない - 私はP1に利用可能な動きを交互にする必要があります、そのノードを取得し、minimaxに似ているプレーヤー2のすべてを繰り返す必要がありますか? – progan01

+0

あなたのコードはとても感謝しています。私の難しさは、私のゲームでは、各プレイヤーがチェスのように利用可能な別個の動きを持っているので、残りの利用可能な動きのリストを(私が見てきたように)保持することはできません。隣人なので、私はそれぞれの移動の後にそれらを新たに生成しなければならない。 – progan01

+0

選択アスペクトについては、すべてのノードが子ノードが自分の視点から勝ち/訪問数を保持していることを知っているので、同じUCB式に従えばOKです。 2番目のコメントについては、すべてのノードに対応する状態が関連付けられていることに注意してください。その状態(ノードの__init__)から未試行のすべての移動を要求しているので、試行されていない移動属性Nodeはもちろん、移動ごとに新たに生成されたプレイヤーの位置に相対的です。 –

関連する問題