CartPole任务的最佳目标函数是什么?

时间:2017-01-16 20:52:01

标签: machine-learning gradient-descent reinforcement-learning

我正在做政策梯度,我正在试图找出最佳目标函数是什么。任务是开放式的CartAole-v0环境,其中代理人在其存活的每个时间阶段获得1的奖励,并在终止时获得0的奖励。我想弄清楚哪个是建模目标函数的最佳方法。我想出了3个可能的功能:

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)])

请注意,对于平均奖励目标函数将始终返回1,除非我介入并修改奖励函数以在终止时返回负值。我问的不是仅仅进行一些实验的原因是因为其他地方出现了错误。因此,如果有人能指出我在这个领域的良好实践,我可以专注于算法中更重要的错误。

1 个答案:

答案 0 :(得分:2)

你应该使用最后一个(折扣奖励的总和),因为推车杆问题是无限期MDP(你想尽可能平衡杆)。 The answer to this question解释了为什么你应该在无限期MDP中使用折扣因子。

相反,第一个是奖励的一个未折扣的总和,如果剧集具有固定长度(例如,在机器人执行10秒轨迹的情况下),则可以使用该总和。第二个通常用于有限地平面MDP,但我不是很熟悉它。

对于购物车杆,折扣系数应为0.9(或者,根据所使用的算法,您可以搜索科学论文并查看使用的折扣系数)。

最后一点。您描述的奖励功能(每个时间步+1)并不是文献中唯一使用的功能。一个常见的(我认为也是“原始的”)在每个时间步长给出0,如果极点落下则为-1。其他奖励功能与杆和推车之间的角度有关。