OpenAI Gym 中设置奖励门槛的目的是什么?

数据挖掘 强化学习 开放式健身房
2022-03-13 11:46:53

我已经看到 OpenAI Gym 环境可以使用可选的奖励阈值 ( reward_threshold) 进行注册,该阈值表示:

任务被认为已解决之前的奖励阈值

这个值如何影响学习过程?还是必须手动将每一集中获得的奖励reward_threshold

2个回答

我在健身房代码库中进行了一些挖掘,至少从 v.0.18.0 开始,健身房本身似乎根本没有使用reward_threshold(相反max_episode_steps,它用于Done在踏入环境时计算信号)。

因此,如果他们想使用它,就必须从环境中手动访问该字段。

reward_threshold (float) – Gym 环境参数,任务被认为已解决之前的奖励阈值 [1]

仅仅从那句话的定义来看,这听起来像是一个总奖励,例如,代理必须在任务完成之前获得,然后结束。

例如,如果这是一个让cartpole 代理保持直立/垂直的任务,它可能被表述为帧数,因此 1 帧 = 1 点奖励,如果reward_threshold = 200,则代理必须平衡杆 200 帧才能成功。

看看OpenAI Gym 网站上的 cartpole 示例

while True:
    candidate_model = model.symmetric_mutate()
    rewards = [run_one_episode(env, candidate_model, False) for _ in range(5)]
    reward = np.mean(rewards)
    if reward >= env.spec.reward_threshold:
        print "Reached reward threshold!"
        rewards2 = [run_one_episode(env, candidate_model, False) for _ in range(env.spec.trials)]
        if np.mean(rewards2) >= env.spec.reward_threshold:
            break
        else:
            print "Oops, guess it was a fluke"

所以代理运行了 5 集 ( for _ in range(5)),每集都会返回一个奖励。我们计算 5 集 ( reward = np.mean(rewards)) 的平均奖励,然后根据该结果引入所需的控制流。

在这种情况下,他们使用环境中的默认奖励阈env.spec.reward_thresholdfor _ in range(env.spec.trials).