0

私はポリシーのグラデーションを行っています。私は、タスクにとって最良の目的関数が何であるかを把握しようとしています。タスクは、エージェントが存続するタイムステップごとに1の報酬を受け取り、終了時に報酬を受け取るオープンai CartPole-v0環境です。私は目的関数をモデル化する最良の方法であることを理解しようとしています。私が介入し、終了時に負の値を返すために、報酬関数を変更しない限り、平均報酬目的関数のために常に1を返すことCartPoleタスクの目的関数は何ですか?

def total_reward_objective_function(self, episode_data) : 
    return sum([timestep_data['reward'] for timestep_data in timestep_data]) 

def average_reward_objective_function(self, episode_data): 
    return total_reward_objective_function(episode_data)/len(episode_data) 

def sum_of_discounted_rewards_objective_function(self, episode_data, discount_rate=0.7) 
    return sum([episode_data[timestep]['reward'] * pow(discount_rate, timestep) 
     for timestep in enumerate(episode_data)]) 

注:私は3つの可能な機能を作ってみました。いくつかの実験を実行するのではなく、私が求めているのは、他の場所でエラーがあるためです。だから誰かがこの分野の良い練習に向いてくれたら、私はアルゴリズムのより重大な間違いに焦点を当てることができた。

答えて

2

カートポールの問題は無限の地平線のMDP(あなたができる限りポールのバランスをとることを望む)なので、最後のもの(ディスカウントされた報酬の合計)を使用する必要があります。 The answer to this questionは、無限地平線のMDPで割引係数を使用する理由を説明しています。

代わりに、エピソードの長さが固定されている場合(たとえば、ロボットが10秒の軌道を実行している場合など)に使用できる報酬の割引のない合計です。 2番目のものは通常、有限地平線MDPで使用されますが、私はあまりそれに精通していません。

カートポールの場合、0.9の割引係数が有効です(または、使用されているアルゴリズムによっては、学術論文を検索して割引率を見ることができます)。

最後のメモ。説明した報酬関数(各タイムステップで+1)は、文献で使用されている唯一のものではありません。共通のもの(私は「オリジナル」のものとも思う)は、タイムステップごとに0を与え、ポールが落ちれば-1を与えます。他の報酬機能は、ポールとカートとの間の角度に関連する。

関連する問題