【发布时间】:2021-06-01 22:55:51
【问题描述】:
我正在尝试将来自 stable baselines3 库 https://stable-baselines3.readthedocs.io/en/master/ 的 PPO 算法应用到我制作的自定义环境中。
我不明白的是以下行:
mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10, deterministic=True)
我是否应该始终让确定性等于 True? 当我保持确定性 =“真”时,我的自定义环境“以某种方式”总是得到解决(即,总是返回 1 +/- 0 标准的奖励)。
当我将其更改为“False”时,它开始以合理的方式运行(即,有时成功 (reward=1),有时失败 (reward=0)。
【问题讨论】:
-
如果我没记错的话,当使用确定性为 False 时,稳定基线会根据某些分布随机抽样。这意味着,如果模型预测不确定要选择什么,则会获得更高级别的随机性,从而增加探索。在评估期间,您通常不想探索,而是利用模型。因此确定性应该是 True,它总是返回最佳操作。当使用确定性为 False 时,您不会总是获得最佳动作,但有时会随机选择不太理想的动作(基于您的模型置信度)。
-
我在训练模型之前和之后实际测试了它(deterministic="True")。甚至在训练模型之前,奖励总是 1,这是非常不寻常的。你能解释一下为什么未经训练的模型会成功吗?
-
我不知道你正在训练的环境,你能提供一些模型的动作分布(确定性=
True和False)和你的环境的一个小解释吗?这将有助于思考哪里出了问题。到目前为止,我的想法是默认模型初始化已经解决了环境问题,你永远不会得到不同的操作(这会让你失败)。 -
运行代码 100_000 步并且 Determinstic=True,导致
0.开始和49.结束 如果 Determinstic=False,开始0.并结束31。这似乎是合理的。对于渲染,它很慢的原因是因为您每次都使用更多数据重新渲染整个图。处理这个问题的最佳方法是使其成为一个单独的进程并使用队列来传输数据。或者设置一个渲染间隔,例如每 20 步。 -
可以在here找到使用单独进程进行绘图的示例。
标签: python-3.x reinforcement-learning stable-baselines