Gymで強化学習⑪動的計画法:実装編
前回はGymの環境であるFrozen Lake(凍った湖)で動くランダムなエージェントと手動エージェントを作成しました。また状態遷移の確率によって最適なポリシーが変わってくることを解説しました。
今回は動的計画法であるポリシー反復法と価値反復法を実装します。
動的計画法エージェント
エージェントの全体像
動的計画法では環境における状態、報酬、状態遷移の確率がすべてわかっていることを前提としています。なので、経験から学ぶ必要がありません。
よって、エージェントを初期化する段階でポリシーが確定します。動的計画法は英語ではDynamic Programming(ダイナミック・プログラミング)なので以下のように定義しました。
class DynamicProgrammingAgent:
def __init__(self, env, method, gamma, threshold):
# エージェントの初期化
self.env = env
self.policy = dynamic_programming(env, method, gamma, threshold)
def reset(self, observation, info):
# 環境からの初期観測値を受け取る
self.state = observation
def act(self):
# ポリシーから行動を取得
action = self.policy[self.state]
return action
def learn(self, observation, reward, terminated, truncated, info):
self.state = observation
エージェントの初期化のところでポリシーを計算しています。詳細は後述します。
def __init__(self, env, method, gamma, threshold):
# エージェントの初期化
self.env = env
self.policy = dynamic_programming(env, method, gamma, threshold)
また、観測値は凍った湖における位置を示す整数です。4x4 ならば0から15の値になります。この観測値によって得る報酬とエピソードが終了するかどうかが決まるので観測値をそのまま状態として使います。
よってエージェントをリセットするときや観測値を与えられた際に値をキープしておきます。
def reset(self, observation, info):
# 環境からの初期観測値を受け取る
self.state = observation
...
def learn(self, observation, reward, terminated, truncated, info):
self.state = observation
行動選択をする際には、ポリシーに状態を与えると取るべき行動が返されます。
def act(self):
# ポリシーから行動を取得
action = self.policy[self.state]
return action
全体的な処理の流れは以上になります。あとはポリシー反復法と価値反復法がどのように実装されているのかを見ていきましょう。
動的計画法の呼び出し
この記事が気に入ったらサポートをしてみませんか?