Как определить, что среда CartPole решена?

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

        # 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

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

Это всего лишь особенность данной среды/задачи? Чем вообще заканчивается задание?


person Charlie Parker    schedule 17.02.2019    source источник
comment
кросспост: quora.com/unanswered/   -  person Charlie Parker    schedule 18.02.2019


Ответы (2)


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

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

person Chris Holland    schedule 19.02.2019

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

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

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

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

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

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

person Vishma Dias    schedule 21.02.2019