見出し画像

Gymで強化学習⑮モンテカルロ法:実装編

前回はオン・オフポリシーについて解説しました。今回は実際にモンテカルロ法のエージェントを使って凍った湖の環境を解決します。

エージェントの全体像

いつものようにエージェントはいくつかのメソッドを実装することで実行できるようになります。あとで環境を走らせるコードを掲載しますが、基本的に以前に実装したものと同じでエージェントからアクションを受け取り環境に適用することで報酬をエージェントが受け取るという過程を繰り返します。

イプシロン・グリーディ

実装するモンテカルロ法のエージェントではイプシロン・グリーディを使って経験を貯めていきます。以下は、エージェントの全体像を要点だけに絞って示したものです。

class MonteCarloAgent:
    def __init__(self, env, method, gamma, epsilon, epsilon_decay):
        self.env = env
        ...
        self.epsilon = epsilon
        ...

        # モンテカルロ法による行動価値関数の計算
        self.Q = np.zeros((env.observation_space.n, env.action_space.n))
        ...

    def reset(self, observation, info):
        self.state = observation
        self.samples = []

    def act(self):
        if np.random.rand() < self.epsilon:
            self.action = np.random.choice(self.env.action_space.n)
        else:
            # 最大値の行動を返す
            self.action = np.argmax(self.Q[self.state])
        return self.action

    def learn(self, observation, reward, terminated, truncated, info):
        # エピソードの行動と観測値を記録する
        self.samples.append((self.state, self.action, reward))
        ...

これを土台に改良を重ねてさまざまなモンテカルロ法(オンポリシー、オフポリシー、逐一訪問、初回訪問)に対応していきますが、まずは基本的な仕組みを解説します。

今回も凍った湖の環境を使います。

https://gymnasium.farama.org/environments/toy_text/frozen_lake/

凍った湖の環境では観測値(observation)は凍った湖における位置を示す整数です。4x4 の地図ならば0から15の値になります。

4x4の地図

この観測値によって得る報酬とエピソードが終了するかどうかが決まるので観測値をそのまま状態として使います。

ここから先は

28,557字 / 1画像

キカベン・読み放題

¥1,000 / 月
初月無料
このメンバーシップの詳細

この記事が気に入ったらサポートをしてみませんか?