问题标签 [sarsa]

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 回答
195 浏览

c# - 在 Unity 中实施 SARSA

所以我使用以下代码在 Unity 中实现 Q-learning:

这适用于我的环境。但是,我也在尝试实现 SARSA 来测试这两种算法。我知道 Q-learning 是 off-policy,而 SARSA 是 on-policy,这意味着我必须实施一个策略来获得下一个动作,而不是简单地调用

然而,这个的实际实现让我感到困惑,我将如何修改我的脚本以包含这个策略?

0 投票
1 回答
307 浏览

machine-learning - Cart Pole 的 SARSA 值近似值

我有一个关于这个SARSA FA 的问题。

在输入单元格 142 中,我看到了这个修改后的更新

其中q_hat_nextQ(S', a')q_hat_gradQ(S, a)(假设S, a, R, S' a'序列)的导数。

我的问题是更新不应该是这样的吗?

修改后的更新背后的直觉是什么?

0 投票
1 回答
1184 浏览

reinforcement-learning - Sarsa 和 Q Learning(强化学习)不收敛最优策略

我有一个关于我自己测试强化学习技术的项目的问题。首先让我解释一下目的。我有一个代理可以在 8 个步骤中执行 4 个操作。在这八个步骤结束时,代理可以处于 5 种可能的胜利状态。目标是找到最小成本。要获得这 5 次胜利(具有不同的成本值:50、50、0、40、60),代理不会采用相同的路径(如图形)。蓝色状态是失败状态(对质量感到抱歉)并且剧集已停止。

在此处输入图像描述

真正好的路径是:DCCBBAD

现在我的问题是,我不明白为什么在 SARSA 和 Q-Learning(主要是 Q 学习)中,代理在 100 000 次迭代后找到了一条路径但不是最优路径(总是:DACBBAD/DACBBCD)。有时当我再次计算时,代理会落入良好的路径(DCCBBAD)。因此,我想了解为什么有时代理会找到它,而有时却找不到。还有一种方法可以让我的代理稳定下来吗?

十分感谢,

坦吉

0 投票
1 回答
188 浏览

algorithm - 资格跟踪算法,更新顺序

我正在阅读Silver et al (2012) "Temporal-Difference Search in Computer Go",并试图了解资格跟踪算法的更新顺序。在论文的算法 1 和 2 中,在更新资格跟踪之前更新了权重。我想知道这个顺序是否正确(算法 1 的第 11 和 12 行,以及算法 2 的第 12 和 13 行)。考虑一个极端的情况lambda=0,参数不会用初始状态-动作对更新(因为e仍然是 0)。所以我怀疑这个顺序可能应该是相反的。

有人可以澄清这一点吗?

我觉得这篇论文对学习强化学习领域很有指导意义,所以想详细了解一下这篇论文。

如果有更合适的平台问这个问题,也请告诉我。

在此处输入图像描述 在此处输入图像描述

0 投票
1 回答
142 浏览

machine-learning - 使用强化学习教机器人在到达终端状态之前收集网格世界中的物品

我的问题如下。我有一个简单的网格世界:

https://i.imgur.com/2QyetBg.png

代理从标有 START 的初始状态开始,目标是达到标有 END 的终端状态。但是,代理必须避开标有 X 的障碍,并且在到达 END 状态之前它必须收集所有标有 F 的项目。我也使用 Q-Learning 和 Sarsa 来实现它,并且代理达到 END 状态并避免障碍(X 个状态)。所以这部分工作得很好。

我的问题是,如何让代理在达到 END 状态之前收集所有项目(F 状态)?通过使用 Q-Learning 或 Sarsa,它可以避开障碍,达到 END 状态,但不会收集所有项目。通常访问一个 F 状态并在代理前往 END 状态之后。

谢谢您的帮助!

0 投票
0 回答
278 浏览

reinforcement-learning - 这是真的 ?预期 SARSA 和双 Q-Learning 怎么样?

我正在学习Reinforcement Learning,我在理解 SARSA、Q-Learning、预期 SARSA、双 Q 学习和时间差异之间的区别时遇到了问题。你能解释一下区别并告诉我什么时候使用它们吗?而对e-greedy和greedy move有什么影响呢?

沙萨:

我处于状态St,在策略的帮助下选择了一个动作,因此它将我移动到另一个状态St+1根据状态中的策略,St+1一个动作被执行,因此我Reward的 inSt将由于预期Reward的前瞻性状态而被更新St+1

Q-学习:

我在状态St,在政策的帮助下选择了一个动作,所以它让我进入状态St+1,这一次它不会依赖于政策,而是它将观察状态中预期Reward(贪婪Reward)的最大值St+1并通过它状态奖励St将被更新。

预计 SARSA:

这将与 Q-learning 相同,而不是Reward在贪婪的移动的帮助下更新我的St+1我接受所有行动的预期回报:

时间差异:

当前Reward将使用观察到的奖励Rt+1和估计值V(St+1)At更新timepoint t + 1

我得到的是真的还是我错过了什么?那么双Q学习呢?

以 0.5 的概率:

别的:

有人可以解释一下吗!!

0 投票
0 回答
45 浏览

c# - 无法在 Accord.NET 中保存 Sarsa

我对 Unity 和 Accord.Net 还很陌生,但我目前正在 Unity 中制作一个小游戏,并决定看看我可以通过一些强化学习来做些什么来让它更有趣。一切都很顺利,除了我无法拯救 Sarsa。我不断收到此错误“SerializationException: Type 'Accord.MachineLearning.Sarsa' in Assembly 'Accord.MachineLearning, Version=3.8.0.0, Culture=neutral 未标记为可序列化。”

这个问题之前已经在他们的 github 上提到过:Github/Accord.NET-SarsaNotSerializable。它说该问题已得到解决,甚至包括一个如何使其正常工作的示例。我已经尝试像示例中那样运行它,但我仍然遇到同样的错误。

我试过使用:

  • Serializer.Save(sarsa, 路径)
  • sarsa.Save(路径)
  • Serialzer.Save(sarsa, stream) (来自上面的 github 示例)

我只是想知道是否有其他人以前遇到过这个问题?我不太确定我是否遗漏了某些东西,或者他们只是从未更新它以使 sarsa 可序列化。

0 投票
1 回答
230 浏览

tensorflow - 使用张量流实现 SARSA

我现在尝试学习强化学习的概念。因此,我尝试使用 tensorflow 为推车杆示例实现 SARSA 算法。我将我的算法与对 q 值函数使用线性逼近函数的算法进行了比较,发现我的算法非常相似。不幸的是,我的实现似乎是错误的或效率低下的,因为学习成功是相当有限的。有没有人可以告诉我我是否做错了什么以及它是什么?我的实现代码是:

0 投票
1 回答
36 浏览

python - 转换为 Python 标量

我正在实现一个 SARSA 强化学习功能,它选择遵循相同当前策略的操作更新其 Q 值。

这引发了以下错误:

我假设这些行有问题:

这是整个方法:

0 投票
0 回答
131 浏览

python - 强化学习 SARSA(λ) 算法不学习任务

我正在学习关于 RL 的课程,我必须在其中完成一项任务,其中涉及使用自己设计的环境和代理解决 RL 问题。我决定创建一个代理来训练自己玩老式的 Atari 游戏 Pong。我试图弄清楚我是否犯了基本的理论错误,或者我只需要调整我的超参数(步长、奖励衰减率、资格跟踪衰减率、epsilon、epsilon 衰减率)

这些州是:

  • 球的 x 位置(36 个选项)
  • 球的 y 位置(32 个选项)
  • 球的 x 速度(2 个选项,左右)
  • 球的 y 速度(4 个选项,上下,2 种不同的速度)
  • 桨/代理的 y 位置(32 个选项)

行动是:

  • 向上移动桨/代理
  • 不要移动桨/代理
  • 向下移动桨/代理

这使得状态动作空间成为一个 6D (36x32x2x4x32x3 = 884,736) 数组,我想使用以下 SARSA(λ) 伪算法对其进行训练:

  • 设置超参数 (alpha = 0.001, gamma = 0.99, lambda = 0.99, epsilon_start = 0.9999, epsilon_end = 0.01) <--我认为这是出错的地方
  • 初始化 Q 零矩阵
  • 初始化零的资格跟踪矩阵
  • 循环播放完整剧集
    • 将成功反弹和不成功反弹的计数器设置为零
    • 获取当前 epsilon
    • 初始化状态
    • 根据政策采取第一行动
    • WHILE 不满足中断条件
      • 动作后获取新状态(请注意,有些状态已超出代理控制)
      • 如果对手得分:reward = -1,如果代理成功击球:reward = +1(也可以设置为0)
      • 根据政策采取新行动
      • 获取 delta = 奖励 + gamma x Q(newstate, newaction) – Q(state, action)
      • 更新资格跟踪:ET(state, action) = 1(替换)
      • 更新所有状态动作的 Q:Q = Q + alpha x delta x ET
      • 更新所有状态动作的 ET:ET = ET x gamma x lambda
      • 更新策略(epsilon-greedy)
      • 用 state 和 action 替换 newstate 和 newaction
      • 如果中断条件失败(1 次不成功的反弹):中断,如果中断条件通过(10 次成功的反弹):保存策略并中断

你对超参数有什么建议吗?伪算法看起来还可以吗,或者您对此也有建议吗?我真的认为这与两者之一有关,因为我无数次检查了我的环境。

如果有人可以在这里给我一些建议,我会得到很多帮助!提前致谢!