问题标签 [rllib]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - RLLib 调整 PPOTrainer 但不调整 A2CTrainer
我正在将这两种算法与 CartPole 环境进行比较。进口为:
运行它完美地工作:
但是当我对 A2C 代理做同样的事情时:
它返回此异常:
谁能告诉我发生了什么事?我不知道这是否与我正在使用的库版本有关,或者我编码错误。这是一个常见问题吗?
python - Rllib 离线 SAC 的数据准备
我有一些离线体验: (s, a, r, s') 是用启发式方法生成的。我想在训练 SAC 代理时使用这些。使用示例save_experiences准备我的数据在与 SAC 一起使用时会出现错误。这是一个colab,其中暴露了 pendulum-v0 环境的问题。我从错误消息中了解到,除了作为离线数据生成的体验之外,SAC 还期待一些“权重”(有时是“不”?!)。我可以在 SAC 中仅使用离线体验(s、a、r、s')吗?
谢谢。
machine-learning - RLlib `rollout.py` 是否适用于评估?
TL;DR:RLlib 的rollout
命令似乎是在训练网络,而不是评估。
我正在尝试使用 Ray RLlib 的 DQN 在定制的模拟器上训练、保存和评估神经网络。为此,我一直在使用 OpenAI Gym 的 CartPole-v0 环境对工作流程进行原型设计。这样做,我在运行rollout
命令进行评估时发现了一些奇怪的结果。(我使用了在RLlib Training APIs - Evaluating Trained Policies 文档中编写的完全相同的方法。)
首先,我训练了一个普通的 DQN 网络,直到它达到episode_reward_mean
200 分。然后,我使用该rllib rollout
命令在 CartPole-v0 中测试了 1000 集的网络。前 135 集的episode_reward_mean
分数很糟糕,从 10 到 200 不等。然而,从第 136 集开始,分数一直是 200,这在 CartPole-v0 中是满分。
所以,看起来更像rllib rollout
是训练网络,而不是评估。我知道情况并非如此,因为rollout.py
模块中没有用于培训的代码。但我不得不说,这看起来真的很像训练。不然怎么会随着情节的增多而逐渐增加分数呢?此外,网络在评估过程后期“适应”不同的起始位置,这在我看来是训练的证据。
为什么会发生这种情况?
我使用的代码如下:
- 训练
- 评估
- 结果
python - 正确使用 a2c.A2cTrainer Rllib 与健身房和宠物动物园
我正在使用本文构建一个演讲者听众rllib
培训环境。使用pettingzoo 和 supersuit。
我遇到了以下错误:
尝试运行我的代码时,但由于我缺乏使用这些包的经验,我不明白问题是在我的代码中还是在使用这些包,因为它们应该足以使用rllib
. 我最后附上了我的代码,这是有问题的行:
我相信我已经接近让它工作了,这是其余的代码:
reinforcement-learning - rllib 中的复杂动作掩码
rllib 示例中提供了参数/可变长度动作模型。该示例假设输出是单个分类操作 dist 的 logits。如何使用更复杂的输出来完成这项工作?
例如,一个盒子里有 200 个不同的球。每步 2 球被捡起并放回。动作空间可以定义为 Multidiscrete([200, 200]) 或 Tuple((spaces.Discrete(200), spaces.Discrete(200)))。
有 3 个限制使某些操作无效。
- 每次2个球都不一样。所以像 (1,1) 或 (2,2) 这样的动作是无效的。
- 相同颜色的球不允许一起捡。比如2号球和3号球都是黄色的,所以在某些状态下不能一起捡。所以 action(1,2) 在那个状态下是无效的。
- 有些球在特定状态下是不允许捡的。例如,当 2 号球被标记为不允许捡球时,所有与 2 号球类似的动作 (1, n) 或 (n,1) 的动作都无效。
如何通过 rllib 中的动作屏蔽来强制执行这 3 个约束。
假设我们的 obs 空间有 2 个部分。第一个约束是隐含的。可以在没有观察空间的情况下确定无效动作。对于第二个约束,A real_obs用一个表示颜色的数字标记每个球。相同号码的球不允许一起捡。对于第三个约束,一个指示是否允许捡球的action_mask 。
具体来说,如何在自定义模型中实现动作/观察空间和前向功能?
如果我对 obs 空间的假设是不可行的。您可以定义您的 obs 空间和相应的自定义模型。
reinforcement-learning - 从 ray.tune 中提取代理
我一直在使用 azure 机器学习来训练使用 ray.tune 的强化学习代理。
我的训练功能如下:
如何从检查点中提取代理,以便可以将我的健身房环境中的操作可视化,如下所示:
我知道我可以使用这样的东西:
但我不确定如何从 tune.run 中存在的代理中提取计算操作(和奖励)。
reinforcement-learning - 一步多动作,强化学习
我正在尝试编写一个自定义的 openAI Gym 环境,其中代理在每个步骤中执行 2 个动作,其中一个是离散动作,另一个是连续动作。我正在使用 Ray RLLib 并使用 SAC 算法,因为它同时支持离散和连续动作空间。我的问题是有没有人知道如何让代理每一步采取两个动作,一个是连续的,另一个是离散的?
ray - Ray rllib 自定义训练流程
我想细化算法的步骤:默认情况下,动作选择为:
a = argmax Q(f(s), a; teta)
然后计算从旧状态到新状态的转换。然后将旧状态、动作、奖励和新状态存储在缓冲区中。
我想更改 get 操作函数并使其看起来像这样:
我该如何定制这个?
openai-gym - [Rllib]如何将定制的游戏http环境集成到Rllib中进行多环境训练
嗨,我将游戏环境打包到 HTTP API 中(在特定端口上,例如 33333)并将其集成到 Gym 接口中(例如,在 step 函数中,我调用特定 url 来获取游戏信息)。我可以在服务器的 33333 端口上运行此游戏服务,并且我想在多个环境中训练代理。该服务仅针对一集迭代,如何在 Rllib 上实现多 env 训练?
我是否必须为端口 33333-33433 手动启动多个环境,或者 Rllib 可以自动为我实现这一点?(如果是这样,如何使用这个现有的游戏环境和端口 33333?)