Я проходил этот учебник и увидел следующий фрагмент кода:
# Calculate score to determine when the environment has been solved
scores.append(time)
mean_score = np.mean(scores[-100:])
if episode % 50 == 0:
print('Episode {}\tAverage length (last 100 episodes): {:.2f}'.format(
episode, mean_score))
if mean_score > env.spec.reward_threshold:
print("Solved after {} episodes! Running average is now {}. Last episode ran to {} time steps."
.format(episode, mean_score, time))
break
однако для меня это не имело смысла.Как определить, когда «среда RL была решена»?Не уверен, что это вообще значит.Я предполагаю, что в классификации было бы целесообразно определить, когда потери равны нулю.Может быть, в регрессии, когда общая потеря l2 меньше некоторого значения?Возможно, имело бы смысл определить его, когда ожидаемая доходность (дисконтированное вознаграждение) больше некоторой стоимости.
Но здесь, кажется, они считают количество временных шагов?Это не имеет никакого смысла для меня.
Обратите внимание, что в оригинальном учебнике было следующее:
def main(episodes):
running_reward = 10
for episode in range(episodes):
state = env.reset() # Reset environment and record the starting state
done = False
for time in range(1000):
action = select_action(state)
# Step through environment using chosen action
state, reward, done, _ = env.step(action.data[0])
# Save reward
policy.reward_episode.append(reward)
if done:
break
# Used to determine when the environment is solved.
running_reward = (running_reward * 0.99) + (time * 0.01)
update_policy()
if episode % 50 == 0:
print('Episode {}\tLast length: {:5d}\tAverage length: {:.2f}'.format(episode, time, running_reward))
if running_reward > env.spec.reward_threshold:
print("Solved! Running reward is now {} and the last episode runs to {} time steps!".format(running_reward, time))
break
, но я не уверен, имеет ли это больше смысла...
это только особая причуда этой среды / задачи?Чем заканчивается задача в целом?