Как определить, когда среда CartPole была решена? - PullRequest
0 голосов
/ 18 февраля 2019

Я проходил этот учебник и увидел следующий фрагмент кода:

        # 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

, но я не уверен, имеет ли это больше смысла...

это только особая причуда этой среды / задачи?Чем заканчивается задача в целом?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

это только особая причуда этой среды / задачи?

Да.Завершение эпизода полностью зависит от соответствующей среды.

Задание CartPole считается решенным, если среднее вознаграждение больше или равно 195,0 за 100 последовательных испытаний.

Эффективность вашего решения измеряется тем, насколько быстро ваш алгоритм смог решитьпроблема.

Для получения дополнительной информации о env Cartpole см. эту wiki .

Для получения информации о любой среде GYM см. эту wiki .

0 голосов
/ 19 февраля 2019

Время, используемое в случае с картполом , равно награде эпизода .Чем дольше вы уравновешиваете полюс, тем выше оценка, останавливаясь на некотором максимальном значении времени.

Таким образом, эпизод будет считаться решенным, если среднее значение последних эпизодов будет достаточно близко к этому максимальному времени.

...