Я просматривал этот учебник и увидел следующий фрагмент кода:
# 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
не уверен, что это имеет больше смысла...
Это всего лишь особенность данной среды/задачи? Чем вообще заканчивается задание?