3

小さなゲームの AI に MCTS アルゴリズムを実装しようとしています。ゲームはRPGシミュレーションです。AI は、戦闘でどの動きをするかを決定する必要があります。ターンベースバトル(FF6-7風)です。関連する動きはありません。

詳細については触れませんが、プレイヤーがプレイする番になったときに、特定の状況でどの動きがプレイヤーを選択するかを確実に知っていると仮定しても問題ありません。

どちらかのパーティが生きているユニットを失った場合、ゲームは終了します (4v4)。何ターンでもかかる可能性があります(終了しない場合もあります)。ダメージ計算とスキル処理には多くのRNG要素があります(攻撃はヒット/ミス、クリティカルかどうか、「proc」できるかどうかにかかわらず多くのprocsが進行中です、バフは発生する%値を持つことができます. ..)。ユニットにはそれぞれ約 6 つのスキルがあり、分岐要因がわかります。

私は今のところ悪い結果をもたらす MCTS の暫定版を構築しました。私はいくつかの問題を抱えています:

私の主な問題の 1 つは、移動の非決定論的状態をどのように処理するかということです。私はこれについていくつかの論文を読みましたが、私はまだ暗闇の中にいます.

ゲーム情報を決定し、その上で MCTS ツリーを実行し、プロセスを N 回繰り返して、考えられるゲームの状態を幅広くカバーし、その情報を使用して最終決定を行うことを提案する人もいます。最終的には、MCTS ツリーを 1 回ではなく N 回計算する必要があるため、計算時間が大幅に増加します。私は戦いの過程で何千ものRNG要素を持っているので、それに頼ることはできません.

同じ動きに X 個の子を追加するという考えがありましたが、それも良い答えにはならないようです。RNG 曲線を少し滑らかにしますが、特定の RNG のパーセンテージと比較して X の値が大きすぎる/小さすぎる場合は、逆方向にシフトできます。そして、複数の RNG パー ムーブ (ヒット チェンジ、クリティカル チャンス、何かを発動するパーセンテージなど) を取得したので、すべてのケースを満たす適切な X の値を見つけることができません。何よりも悪いバンドエイドです。

同様に、RNG タプルごとに 1 つのノードを追加する {ヒットまたはミス、クリティカルかどうか、proc1 かどうか、proc2 かどうかなど...} は、すべての可能な状況をカバーする必要がありますが、いくつかの重大な欠点があります。移動ごとに 2^5 ノードを考慮する必要があり、計算するには多すぎます。それらをすべて作成できれば、それらに確率 (ノードのタプル内の各 RNG 要素の確率にリンク) を割り当て、選択段階でその確率を使用できます。これは全体的に機能するはずですが、CPU では非常に困難です :/

また、2 つの異なるゲーム状態に基づいてプレイヤー/モンスターの統計値を正確に平均化し、移動処理中に移動の結果を平均化する方法がないため、それらを 1 つのノードに「マージ」することはできませんが、多くのことが必要です。コードを単純化するのは面倒であり、いずれにせよ精度を急速に低下させます。

この問題にアプローチする方法はありますか?

アルゴリズムの他のいくつかの側面は私を避けています:

終了状態になるまで完全なプレイアウトを行うことはできません。これは、A) 計算に多くの時間がかかるため、および B) 一部の戦闘が (設計上) 終わらない可能性があるためです。私は2つの解決策を持っています(私は混ぜることができます)-Xターンのランダムプレイアウトを行います-評価関数を使用して、状況を試してスコアを付けます。

評価するヘルスポイントのみを考慮しても、特定の状況で信頼できる値を返すための適切な評価関数を見つけることができません (プレイヤーの場合は 1 ~ 4 ユニット、モンスターの場合も同じです。現在の HP を知っています/最大値)。私を悩ませているのは、戦いの長さ/力の格差が大きく異なる可能性があることです. つまり、HP の 0.01% の変化が重要な場合 (たとえば、長いゲーム対ボスの場合) もあれば、重要ではない場合もあります (プレイヤーが自分よりも低いレベルのゾーンを耕作する場合)。

戦闘間のパワーと HP の差異の不均衡は、UCB 選択プロセスでの Biais パラメーターを修正するのが難しいことを意味します。私は現在、0.03 のような非常に低い値を使用しています。> 0.1 で、探索係数が非常に高いため、ツリーは深さごとに構築されます:/

今のところ、私はシミュレーション段階で移動を選択するためにバイアスをかけた方法も使用しています。プレイヤーがその状況で選択する移動と、AI のランダムな移動を選択することで、プレイヤーに有利な偏ったシミュレーションにつながります。両方に純粋なランダムなものを使用してみましたが、結果が悪化するようです。偏ったシミュレーション段階を持つことは、アルゴリズムの目的に反すると思いますか? AIに悲観的な見方を与えるだけで、最終結果にあまり影響を与えないと思う傾向があります. たぶん私の考えは間違っています。

どんな助けでも大歓迎です:)

4

1 に答える 1