0

我知道指定这total_timesteps=是一个需要参数,但我如何model.learn()在某些剧集中结束?原谅我,我还是新手stables_baselines3pytorch仍然不知道如何在代码中实现它。

import gym
import numpy as np
from stable_baselines3 import DDPG
from stable_baselines3.common.noise import NormalActionNoise

env = gym.make('NeuralTraffic-v1')

n_actions = env.action_space.shape[-1]
action_noise = NormalActionNoise(mean=np.zeros(n_actions), sigma=0.1 * np.ones(n_actions))
model = DDPG("MlpPolicy", env, action_noise=action_noise, verbose=1)
model.learn(total_timesteps=60, log_interval=1)
model.save("ddpg")
env = model.get_env()

我想在第 60 集结束这一集,而不是我的推出是:

----------------------------------
| rollout/           |           |
|    ep_len_mean     | 94        |
|    ep_rew_mean     | -2.36e+04 |
| time/              |           |
|    episodes        | 1         |
|    fps             | 0         |
|    time_elapsed    | 452       |
|    total_timesteps | 94        |
----------------------------------

不明白为什么只有1集?我想学习如何实施以将学习限制在指定的情节中。

4

1 回答 1

0

通用 Box-2D 和经典控制环境在一集中有 1000 个时间步长,但这并不是恒定的,因为代理在一开始可能会做一些奇怪的事情,并且环境可以自行重置(导致每集的时间步长不均匀)。因此,与指定一定数量的情节相反,在进行基准测试时(在大多数无模型 RL 研究论文中为 1e6),记住一个特定的时间步是常态。正如您在 SB3 Docs DDPG.learn 方法中看到的那样,它们没有提供特定参数来设置剧集数,实际上最好记住特定数量的时间步长。我看到你写60的是total_timesteps. 训练 RL 代理太少了。尝试保留类似1e51e6你可能会看到好的结果。祝你好运!

于 2022-02-05T19:44:37.570 回答