问题标签 [stable-baselines]

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.

0 投票
1 回答
109 浏览

java - 强化学习 - 用于 Python RL 框架的 Java 自定义环境实现

我有一堆构成环境和代理的 Java 代码。我想使用其中一个 Python 强化学习库(stable-baselines、tf-agents、rllib 等)来训练 Java 代理/环境的策略。然后在 Java 端部署策略进行生产。是否有将其他语言合并到 Python RL 库中的标准做法?我正在考虑以下解决方案之一:

  1. 将 Java env/agent 代码包装到 REST API 中,并在 Python 中实现自定义环境,调用该 API 以逐步通过环境。
  2. 使用 Py4j 从 Python 调用 Java 并实现自定义环境。

哪一个会更好?还有其他方法吗?

编辑:我最终选择了前者——部署了一个封装环境的 Web 服务器。对我来说效果很好。如果有更好的做法来处理这种情况,请留下问题!

0 投票
0 回答
90 浏览

python - 如何将 Numpy 版本 1.19.5 与 Tensorflow 一起使用并且不会出现 numpy.ndarray 大小更改错误?

我一直在尝试在我的新 m1 芯片计算机上使用 stable_baselines;但是,从我找到的一些示例代码中安装所有软件包后,我一直收到此错误

我知道这是在 numpy >= 1.20 中修复的;但是 tensorflow 需要 1.19.5;关于解决方法的任何建议?

这是完整的错误日志:

0 投票
1 回答
426 浏览

python - 稳定基线3 日志奖励

如何使用自定义环境将奖励添加到稳定基线 3 中的张量板日志记录?

我有这个学习代码

0 投票
0 回答
54 浏览

python - 我可以在 SB3 中创建上下文多臂强盗代理吗?

我想知道是否可以创建一个等效于contextual Multi-Armed Bandit使用 SB3 库的代理。

在我看来,这是一个简单得多的代理,但是查看他们说他们不涵盖那种算法的库文档,我想知道是否可以通过调整现有代理之一来创建类似的代理(没有轨迹解释) .

我的第一种方法是通过分配 的值来使用任何代理gamma=0,但我认为这在数学上是不正确的。

0 投票
0 回答
945 浏览

python - 如何从 openai-gym 安装 Atari 环境?

在这段视频 ( https://www.youtube.com/watch?v=Mut_u40Sqz4&t=883s ) 的 1:47:40 处,他输入了以下代码:

我已经下载了 ROMS 文件夹,它的路径是“current_directory/ROMS/ROMS”,所以我相信这个命令的最后一部分是正确的。但是,当我运行此命令时,出现以下错误:

最终我只想让这段代码工作:

有人知道我该怎么做吗?谢谢

0 投票
0 回答
105 浏览

machine-learning - 在 stable-baselines3 中修改 ppo 中的损失

我正在尝试在 stable-baselines3 中实现对 ppo 算法损失函数的补充。为此,我收集了状态 s(t-10) 和 s(t+1) 的额外观察结果,作为 rollout_buffer 的一部分,我可以在 ppo.py 中的 PPO 类的训练函数中访问它们。

我使用 3-layer-mlp 作为我的网络架构,需要第二层的输出供三元组(s(t-α), s(t), s(t+1))使用它们来计算 L = max(d(s(t+1) , s(t)) − d(s(t+1) , s(t−α)) + γ, 0),其中 d 是 L2 距离。

最后我想将这个术语添加到旧的损失中,所以loss = loss + 0.3 * L

这是我的实现,从第 242 行的原始损失开始:

因此,对于 net1,我尝试使用第二层的输出来克隆原始网络。我不确定这是否是正确的方法。

我确实对我的方法有一些疑问,因为与没有添加术语相比,结果性能稍微差一些,尽管它应该会稍微好一些:

  1. 我获得 mlp 网络第二层输出的方法是否有效?
  2. 什么时候loss.backward()调用可以正确计算梯度(包括新术语)?
0 投票
0 回答
62 浏览

python - A2C 稳定基线中熵系数的线性时间表

我在稳定的基线中看到可以评估线性时间表,以便在训练期间不断降低学习率。

我想知道在稳定的基线中是否有任何实现,可以使用线性计划来降低训练期间 A2C 模型中的熵系数。

任何帮助将非常感激。

0 投票
0 回答
38 浏览

python - 是什么让多武装老虎机问题与上下文相关,以及 TensorFlow 和 Stable Baseline 等框架如何实现这些

我的目标是在多武装强盗环境中建立一个代理。据我了解,它是上下文相关的,因为我有一个代理使用并知道的状态机。每个状态都是一个武装的强盗,并且有一定的奖励概率,他从一开始就不知道。

所以我想知道,在对代理进行 StableBaselines 3 和 TensorFlow 中的教程时,上下文部分如何在 MAB 设置中对这些代理起作用。在tf 文档中有一句话解释:

在“经典”上下文多臂强盗设置中,代理在每个时间步都会收到一个上下文向量(也称为观察值),并且必须从一组有限的编号动作(臂)中进行选择,以最大化其累积奖励。

所以在我的例子中,这意味着代理,它“站在”一台老虎机(处于某个状态 x)前面,只能到达一定数量的其他机器(在状态机中遍历到可能的 n 个连接状态)。不像经典的 MAB 问题,代理可以随时访问所有强盗(状态)。因此代理使用观察函数来获取上下文向量,其中包含他可能采取的行动的信息。这就是让强盗问题与上下文相关的原因,我是对的吗?

在这两个框架中,基本上有三个部分:代理、策略和环境。该环境将包含我的状态机。但是上下文向量部分如何适应设计呢?我必须以某种方式将其添加到政策中。但是 afaik 政策是一种完成的实施。我会在策略中更改整个算法吗?还是有将这些上下文设置考虑在内的“上下文策略”?我还没有找到关于 StableBaselines 3 或 TensorFlow 文档的任何更深入的信息。

0 投票
1 回答
38 浏览

python - 处理强化学习的非法举动

我正在尝试创建一个代理来玩“nim”游戏。 尼姆游戏图片

(数字是与每个链接关联的“id”)

我创建了一个健身房环境。

我的观察空间是:整数类型的 Box(0,2, shape=(,144))。

有 144 个可能的链接

0 = 无链接

1 = 我们连接的链接

2 = 被对手连接的链接

我的动作空间是: Discrete(144) 我们选择了要连接的链接的编号。

一开始所有144个链接都可以连接随着游戏的进行,链接已连接,我们无法在已连接的链接上玩。

我的奖励是:

  • +100 如果我们连接一个链接
  • -1000 如果对手关闭一个盒子
  • +1000 如果我们关闭一个盒子
  • -10000 如果对手赢得比赛
  • +10000 如果我们赢了比赛
  • -100000000 如果我们采取不公平的行动

这是我用来训练代理的代码:

问题是代理在我训练时只使用非法动作。更准确地说,他一遍又一遍地玩同一个号码。

我怎样才能提高他的训练?

0 投票
1 回答
39 浏览

python - 在简单的 RL 问题中探索糟糕的二维框的 stablebaselines 算法

我正在使用基于 Open AI 健身房的 stableBaselines3。在玩具问题版本中,代理尝试在屏幕上学习给定(固定)目标点(x 和 y 坐标分别在 [0,31] 和 [0,25] 内)。

因此,我的动作空间将是一个盒子(版本 A)self.action_space = ((gym.spaces.Box(np.array([0,0]),np.array([31,25])))):。代理获得的奖励减去所选点和目标之间的曼哈顿距离(模拟立即终止)。但是在运行 PPO 算法时,代理似乎只尝试在 Box [0,0]、[2,2] 内的坐标(即坐标永远不会大于 2)。这个盒子之外的任何东西似乎都没有被探索过。选择的策略甚至不是该框内的最佳点(通常是(2,2)),而是其中的一个随机点。

当我用 (Version B) 将两个轴标准化为 [0,1]self.action_space = ((gym.spaces.Box(np.array([0,0]),np.array([1,1]))))并且重新缩放实际坐标(x 动作乘以 31,y- 乘以 25)时,代理现在确实探索了整个框(我尝试过 PPO 和 A2C)。然而,产生的最优策略通常对应于一个角点(最接近目标的角点),尽管在某些时候在训练期间获得了更好的奖励。只是偶尔其中一个坐标不是边界,永远不会同时出现。

如果我尝试离散化我的问题:self.action_space = gym.spaces.MultiDiscrete([2,32,26]),代理正确地学习了最好的 (x,y) 动作(版本 A 的代码中除了动作空间之外没有任何变化)。显然我不想离散化。

整个行为的可能原因是什么(不探索,只考虑/主要考虑角落,远离更好的奖励)?其余代码太笨重,无法粘贴到此处,但除了动作空间外,这些场景之间没有变化,因此离散化版本有效的事实不符合奖励计算的错误。

最后,我的动作空间需要在两个连续分量(x 和 y)之上有一个离散分量(代理是否找到目标或将继续寻找)。非决定性注视的奖励将是一个小惩罚,最终决定的奖励如上(越接近实际目标越好)。self.action_space = gym.spaces.Tuple((gym.spaces.Discrete(2),gym.spaces.Box(np.array([0,0]),np.array([31,25]),dtype=np.float32)))应该是我正在寻找的,但不支持元组。有什么解决方法吗?当人们同时需要连续和离散组件时,他们会怎么做?我想将二进制组件变成浮点数,并将其转换为低于/高于某个截止值的 0/1,但这不太适合学习。