CartPole 任务的最佳 objective 函数是什么?
What's the best objective function for the CartPole task?
我正在做策略梯度,我试图找出最适合该任务的 objective 函数。任务是开放的 ai CartPole-v0 环境,在该环境中,代理在其存活的每个时间步获得 1 的奖励,并在终止时获得 0 的奖励。我试图弄清楚哪种是对 objective 函数建模的最佳方式。我想出了 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)])
请注意,对于平均奖励 objective 函数将始终 return 1 除非我干预并将奖励函数修改为 return 终止时的负值。我之所以要问而不只是 运行 一些实验,是因为其他地方有错误。因此,如果有人可以指出我在这方面的良好实践,我可以专注于算法中更严重的错误。
你应该使用最后一个(折扣奖励的总和),因为 cart-pole 问题是一个无限范围的 MDP(你想尽可能地平衡杆子)。 The answer to this question 解释了为什么您应该在无限范围 MDP 中使用折扣因子。
相反,第一个只是奖励的未折扣总和,如果剧集具有固定长度(例如,在机器人执行 10 秒轨迹的情况下),则可以使用它。第二种一般用在finite horizon MDPs中,不过我不是很熟悉
对于 cart-pole,折扣系数 0.9 应该有效(或者,根据使用的算法,您可以搜索科学论文并查看使用的折扣系数)。
最后一点。您描述的奖励函数(每个时间步长 +1)并不是文献中唯一使用的函数。一个常见的(我认为也是 "original" 一个)在每个时间步给出 0,如果杆落下则给出 -1。其他奖励函数与杆子和小车之间的角度有关。
我正在做策略梯度,我试图找出最适合该任务的 objective 函数。任务是开放的 ai CartPole-v0 环境,在该环境中,代理在其存活的每个时间步获得 1 的奖励,并在终止时获得 0 的奖励。我试图弄清楚哪种是对 objective 函数建模的最佳方式。我想出了 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)])
请注意,对于平均奖励 objective 函数将始终 return 1 除非我干预并将奖励函数修改为 return 终止时的负值。我之所以要问而不只是 运行 一些实验,是因为其他地方有错误。因此,如果有人可以指出我在这方面的良好实践,我可以专注于算法中更严重的错误。
你应该使用最后一个(折扣奖励的总和),因为 cart-pole 问题是一个无限范围的 MDP(你想尽可能地平衡杆子)。 The answer to this question 解释了为什么您应该在无限范围 MDP 中使用折扣因子。
相反,第一个只是奖励的未折扣总和,如果剧集具有固定长度(例如,在机器人执行 10 秒轨迹的情况下),则可以使用它。第二种一般用在finite horizon MDPs中,不过我不是很熟悉
对于 cart-pole,折扣系数 0.9 应该有效(或者,根据使用的算法,您可以搜索科学论文并查看使用的折扣系数)。
最后一点。您描述的奖励函数(每个时间步长 +1)并不是文献中唯一使用的函数。一个常见的(我认为也是 "original" 一个)在每个时间步给出 0,如果杆落下则给出 -1。其他奖励函数与杆子和小车之间的角度有关。