我已经看到 OpenAI Gym 环境可以使用可选的奖励阈值 ( reward_threshold) 进行注册,该阈值表示:
任务被认为已解决之前的奖励阈值
这个值如何影响学习过程?还是必须手动将每一集中获得的奖励reward_threshold与
我已经看到 OpenAI Gym 环境可以使用可选的奖励阈值 ( reward_threshold) 进行注册,该阈值表示:
任务被认为已解决之前的奖励阈值
这个值如何影响学习过程?还是必须手动将每一集中获得的奖励reward_threshold与
我在健身房代码库中进行了一些挖掘,至少从 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_threshold(for _ in range(env.spec.trials).