В соответствии с исходным кодом stable-baselines
- total_timesteps - это количество шагов всего , которые агент выполнит для любой среды.Total_timesteps может быть в нескольких эпизодах, что означает, что это значение не ограничено каким-либо максимумом.
- Допустим, у вас есть среда с более чем 1000 временными шагами.Если вы вызовете функцию обучения один раз, вы получите только первые 1000 кадров, а оставшаяся часть эпизода неизвестна.Во многих экспериментах вы знаете, сколько временных шагов должна длиться среда (т. Е. CartPole), но для сред с неизвестной длиной это становится менее полезным.НО.Если вы дважды вызовете функцию обучения и скажете, что эпизод среды имеет 1500 кадров, вы увидите полный эпизод + 50% от 2-го.
- Эпизод определяется в той степени, в которой флаг терминала установлен наtrue (в тренажерном зале это также часто устанавливается после максимального временного шага). Многие другие реализации RL вместо этого используют total_episodes, так что вам не нужно заботиться о временном шаге, но, опять же, недостатком может быть то, что вы можете получить толькозапуск 1 эпизода, если вы попали в поглощающее состояние.
Аргумент общего временного шага также использует n_steps, где количество обновлений рассчитывается на основе следующего:
n_updates = total_timesteps // self.n_batch
, где n_batch - это n_steps timesколичество векторизованных сред.
Это означает, что если бы у вас была 1 среда, работающая с n_step, установленным в 32 и total_timesteps = 25000, вы бы сделали 781 обновление вашей политики во время вызова обучения (исключая эпохи, какPPO может сделать несколько обновлений в одной партии)
Урок:
- Для envs неизвестного размера вам придется поиграть с этим значением.Возможно, создайте среднюю длительность эпизода и используйте это значение
- Там, где известна длина эпизода, установите желаемое количество эпизодов, которые вы хотите обучить.Однако, это может быть меньше, потому что агент не может (вероятно, не достигнет) максимального количества шагов каждый раз.
- TLDR воспроизводит значение (рассматривает его как гиперпараметр)
Надеюсь, что этопомогает!