RL:前のアクションを条件とするエンコードアクション

Dec 27 2020

私は、プレイヤーの順番で、プレイヤーが2枚のカードを順番に引くカードゲームを持っています。各カードは、他のプレイヤーの捨て札スタック(表向き)またはデッキ(裏向き)から引くことができます。

これをアクションスペースにエンコードする方法を考えると、2つのドローは独立していると素朴に推測できます。アクションスペースは、単純に2 *(1 +(number_of_players --1))のバイナリベクトルになります。これをポストフィルターして、空のドローパイルを制限できます(自分のパイルからドローすることはできません)。

しかし、自分でゲームをプレイするとき、最初のカードをデッキから引いてから、最初に引いたカードの値に基づいて2番目のカードのドローパイルを選択する方が有利な場合があることに気付きました。しかし、これはどのようにアクションスペースにエンコードされますか?同じ「ターン」の一部であるとしても、これらは2つの別々のアクションであると考える方がよいでしょうか。

回答

2 NeilSlater Dec 27 2020 at 22:31

実験の詳細と結果を完全に知らなければ、確実に言うのは難しいです。

ただし、ゲームで決定を分割できる場合は、エージェントがドローパイルから取り出したばかりの以前に隠されていたカードの価値に関する追加の知識を利用する方がよいでしょう。

一般に、各プレーヤーの決定が順番に行われ、状態が変化する場合、強化学習(RL)で使用されるMDP理論モデルに従って、個別のタイムステップで個別のアクションになります。ゲームプレイの進行方法と一致するように、タイムステップを異なる方法で記述/表記することをお勧めします。ただし、RLの目的上、各決定ポイントは新しいタイムステップ上にある必要があり、新しい状態、新しい値の見積もりなどが発生する必要があります。

同様に、現在の選択がプレイヤーの最初のカードであるか、引き出される2番目のカードであるかどうかは、状態の一部である必要があります。論理的に各ステージでカードの数が常に同じである場合、この状態の詳細は、プレイヤーの手札のカードの数によってすでにカバーされている可能性があります。ただし、他の理由で手のサイズが異なる可能性がある場合は、エージェントが情報を使用できるように、「最初の抽選の選択」などの明示的なフラグを追加する価値があります。

アクションスペースをエンコードするためのある程度の自由があります。このゲームですべての段階でカードを引くことが唯一の可能なアクションである場合、1 +(number_of_players-1)次元のバイナリ出力ベクトルが適しています。他のエンコーディングもうまく機能する可能性があります。選択に論理構造があるかどうか、または有用なゲーム情報をエンコードする派生データがあるかどうかによって異なります。

各プレイヤーの捨て札パイルから引くためのインデックスが現在のプレイヤーのターンと比較して考慮されるように、アクションの選択肢を調整すると便利な場合があります。つまり、アクションが配置される代わりに$[draw, discard P1, discard P3, discard P4, discard P5]$ P2の場合、それらは配置されます $[draw, discard P3, discard P4, discard P5, discard P1]$ P3の場合は異なります。 $[draw, discard P4, discard P5, discard P1, discard P2]$。。。それは本質的にターンの周期的な性質を可能にするでしょう。状態表現は、これに一致するように各プレーヤーに関する知識を同様にローテーションする必要があります。これを行う必要はないかもしれませんが、ターン位置に関連するアクションの選択に関して、利用できる一般的なロジックがたくさんあるゲームにはお勧めします。P1、P2、P3などの間にゲーム全体で重要な違いがあった場合は、反対のことが当てはまります(そして、絶対的なプレーヤーの位置を使用します)。