A2Cという深層強化学習を実装します。
A2Cではエージェントを複数用意して強化学習を行います。
A2Cは「Advantage学習」と「Actor-Critic」を意味します。
- Advantage学習は2ステップ以上先まで動かしてQ関数を更新します。
- Actor-Criticは方策反復法と価値反復法の両方を使用します。
使用するパッケージをインポートします。
1 | # パッケージのimport |
定数を定義します。
今回はエージェントを16個用意し、Advantageするステップ数を5とします。
1 | # 定数の設定 |
A2Cの損失関数の計算のための定数を設定します。
1 | # A2Cの損失関数の計算のための定数設定 |
Advantage学習用にメモリクラスを準備します。
- marks は試行の終端を表します。
- 関数 insert は現在の transition を RolloutStorage に追加します。
- 関数 after_update は Advantage する5ステップが終了したら一番最新(後ろ)の内容を先頭に格納します。
- 関数 compute_returns は各ステップでの割引報酬和を計算します。
1 | # メモリクラスの定義 |
A2Cのディープ・ニューラルネットワークの構築するクラスを実装します。
fc層を2つ用意し、Actor側とCritic側の出力を用意します。
- 関数 act は状態xから行動を確率的に求めます。
- 関数 get_value は状態xでの状態価値を求めます。
- 関数 evaluate_actions はネットワークを更新します。
状態xでの状態価値および実際に行った行動actionsを利用して、行動のlog確率action_log_probsと方策のエントロピーを計算します。
1 | # A2Cのディープ・ニューラルネットワークの構築 |
エージェントが持つ頭脳となるBrainクラスを定義します。
このクラスのオブジェクトは全エージェントで共有されます。
1 | # エージェントが持つ頭脳となるクラスを定義、全エージェントで共有する |
実行する環境のクラスを実装します。
このクラスでエージェントを複数生成し Advantage学習による報酬の計算を行います。
- 関数 run でAdvantageする5ステップ分ずつ各環境を実行します。
この5ステップ全てのtransitionに対してそれぞれ1~5ステップのAdvantage学習を実施します。
1 | # 実行する環境のクラスです |
学習を実行します。
1 | # main学習 |
25エピソードで学習が完了しました。
参考 > つくりながら学ぶ!深層強化学習 サポートページ