问题标签 [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.
c# - 在 Unity 中实施 SARSA
所以我使用以下代码在 Unity 中实现 Q-learning:
这适用于我的环境。但是,我也在尝试实现 SARSA 来测试这两种算法。我知道 Q-learning 是 off-policy,而 SARSA 是 on-policy,这意味着我必须实施一个策略来获得下一个动作,而不是简单地调用
然而,这个的实际实现让我感到困惑,我将如何修改我的脚本以包含这个策略?
machine-learning - Cart Pole 的 SARSA 值近似值
我有一个关于这个SARSA FA 的问题。
在输入单元格 142 中,我看到了这个修改后的更新
其中q_hat_next
是Q(S', a')
和q_hat_grad
是Q(S, a)
(假设S, a, R, S' a'
序列)的导数。
我的问题是更新不应该是这样的吗?
修改后的更新背后的直觉是什么?
reinforcement-learning - Sarsa 和 Q Learning(强化学习)不收敛最优策略
我有一个关于我自己测试强化学习技术的项目的问题。首先让我解释一下目的。我有一个代理可以在 8 个步骤中执行 4 个操作。在这八个步骤结束时,代理可以处于 5 种可能的胜利状态。目标是找到最小成本。要获得这 5 次胜利(具有不同的成本值:50、50、0、40、60),代理不会采用相同的路径(如图形)。蓝色状态是失败状态(对质量感到抱歉)并且剧集已停止。
真正好的路径是:DCCBBAD
现在我的问题是,我不明白为什么在 SARSA 和 Q-Learning(主要是 Q 学习)中,代理在 100 000 次迭代后找到了一条路径但不是最优路径(总是:DACBBAD/DACBBCD)。有时当我再次计算时,代理会落入良好的路径(DCCBBAD)。因此,我想了解为什么有时代理会找到它,而有时却找不到。还有一种方法可以让我的代理稳定下来吗?
十分感谢,
坦吉
algorithm - 资格跟踪算法,更新顺序
我正在阅读Silver et al (2012) "Temporal-Difference Search in Computer Go",并试图了解资格跟踪算法的更新顺序。在论文的算法 1 和 2 中,在更新资格跟踪之前更新了权重。我想知道这个顺序是否正确(算法 1 的第 11 和 12 行,以及算法 2 的第 12 和 13 行)。考虑一个极端的情况lambda=0
,参数不会用初始状态-动作对更新(因为e
仍然是 0)。所以我怀疑这个顺序可能应该是相反的。
有人可以澄清这一点吗?
我觉得这篇论文对学习强化学习领域很有指导意义,所以想详细了解一下这篇论文。
如果有更合适的平台问这个问题,也请告诉我。
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 状态之后。
谢谢您的帮助!
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 的概率:
别的:
有人可以解释一下吗!!
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 可序列化。
tensorflow - 使用张量流实现 SARSA
我现在尝试学习强化学习的概念。因此,我尝试使用 tensorflow 为推车杆示例实现 SARSA 算法。我将我的算法与对 q 值函数使用线性逼近函数的算法进行了比较,发现我的算法非常相似。不幸的是,我的实现似乎是错误的或效率低下的,因为学习成功是相当有限的。有没有人可以告诉我我是否做错了什么以及它是什么?我的实现代码是:
python - 转换为 Python 标量
我正在实现一个 SARSA 强化学习功能,它选择遵循相同当前策略的操作更新其 Q 值。
这引发了以下错误:
我假设这些行有问题:
和
这是整个方法:
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 次成功的反弹):保存策略并中断
-
你对超参数有什么建议吗?伪算法看起来还可以吗,或者您对此也有建议吗?我真的认为这与两者之一有关,因为我无数次检查了我的环境。
如果有人可以在这里给我一些建议,我会得到很多帮助!提前致谢!