web-dev-qa-db-ja.com

モンテカルロ木探索UCTの実装

木の作り方を教えてください。

ノードがどのように選択されるかはよく理解しましたが、より適切な説明があれば、このアルゴリズムを実装するのに役立ちます。ゲームの状態を表すボードはすでに持っていますが、ツリーを生成する方法がわかりません(理解できません)。

誰かが私にアルゴリズムのよくコメントされた実装を指摘できますか(私はそれをAIに使用する必要があります)?またはそれのより良い説明/例?

ネット上で多くのリソースを見つけられませんでした、このアルゴリズムはかなり新しいです...

20
Makers_F

ツリーを生成する最良の方法は、一連のランダムなプレイアウトです。秘訣は、探索と活用のバランスを取ることができることです(これがUCTの出番です)。ここにはいくつかの優れたコードサンプルとたくさんの研究論文のリファレンスがあります: https://web.archive.org/web/20160308043415/http://mcts.ai:80/index.html

アルゴリズムを実装したとき、エンドポイントまたは終了状態に達するまでランダムなプレイアウトを使用しました。この時点でペイオフを計算する静的評価関数があり、この時点からのスコアがツリーに伝播されます。各プレーヤーまたは「チーム」は、他のチームが自分自身のために最善の動きをし、対戦相手にとって可能な限り最悪の動きをすることを前提としています。

また、Chaslotの論文と彼の博士論文、および彼の研究を参照するいくつかの研究(基本的にはそれ以降のすべてのMCTSの研究)を確認することをお勧めします。


例:プレーヤー1の最初の動きは、プレーヤー1の動きとプレーヤー2の動きを交互に繰り返す、将来の10の動きをシミュレートできます。毎回、相手のプレーヤーが自分のスコアを最大化しながら、あなたのスコアを最小化しようとすることを想定する必要があります。ゲーム理論として知られているこれに基づいた分野全体があります。 10ゲームの終わりまでシミュレートしたら、開始点からもう一度繰り返します(1セットの決定だけをシミュレートする意味がないため)。ツリーのこれらの各ブランチは、スコアがツリーに伝播される場所でスコアリングする必要があります。スコアは、他のプレーヤーも自分に最適な動きを選択していると仮定して、シミュレーションを実行するプレーヤーにとって可能な限り最高の見返りを表します。

MCTSは、4つの戦略的ステップで構成され、残り時間がある限り繰り返されます。手順は次のとおりです。

  1. 選択ステップでは、ノードEに到達するまで、ツリーがルートノードからトラバースされます。ノードEでは、まだツリーに追加されていない位置が選択されます。

  2. 次に、プレイアウトステップ中に、ゲームの終わりに達するまで、動きがセルフプレイで再生されます。この「シミュレートされた」ゲームの結果Rは、黒(LOAの最初のプレーヤー)が勝った場合は+1、引き分けの場合は0、白が勝った場合は-1です。

  3. 続いて、拡張ステップでEの子がツリーに追加されます。

  4. 最後に、Rは、バックプロパゲーションステップでEからルートノードへのパスに沿って伝播されます。時間切れになると、プログラムによって再生される動きは、最も高い値を持つルートの子になります。 (この例はこの論文から抜粋したものです-PDF

www.ru.is/faculty/yngvi/pdf/WinandsBS08.pdf

いくつかの実装は次のとおりです。

いくつかのMCTS実装を使用するライブラリとゲームのリスト http://senseis.xmp.net/?MonteCarloTreeSearch

そして、Fuegoと呼ばれるゲームに依存しないオープンソースのUCT MCTSライブラリ http://fuego.sourceforge.net/fuego-doc-1.1/smartgame-doc/group__sguctgroup.html

24
danielbeard

あなたが興味を持っているなら私はこれを書きました: https://github.com/avianey/mcts4j

3
avianey

から http://mcts.ai/code/index.html

Below are links to some basic MCTS implementations in various
programming languages. The listings are shown with timing, testing
and debugging code removed for readability.

Java

Python

3
Thomas Ahle