问题标签 [markov-decision-process]

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 投票
0 回答
55 浏览

python - 在 OpenAI Gym 中定义 MDP 的最简单方法是什么?

我正在寻找基于示例的答案,无论是直接在答案中的代码还是指向教程的链接,但不仅仅是纯文本答案。

我很好奇——为了强化学习解决方案,如何在 OpenAI Gym 中定义任意马尔可夫决策过程?我在工作中经常遇到的问题是旅行推销员、车辆路线和库存优化。通常,我使用遗传算法和贝叶斯优化等优化技术来找到接近最优的解决方案。但是,在这个问题中,我希望看到一种实用/可行的强化学习方法来解决这些问题。据我了解,OpenAI Gym 是为 RL 定义代理/环境的最简单工具。(如果这不是真的,请使用您喜欢的替代方法以相同的详细程度回答这个问题。)

0 投票
0 回答
31 浏览

python - 预测性维护中的 MDP

我正在寻找预测性维护领域中强化学习、马尔可夫决策过程的示例 python 实现。

我自己尝试过,但要么找到了与不同域相关的样本,要么发现了一些无用的东西。

我是新来的。如果有人可以分享 MDP 在预测性维护中的示例实现,将会有很大帮助。

0 投票
0 回答
19 浏览

r - if (temp < vmin) { 中的错误:参数长度为零

我正在尝试为一些控制问题编写马尔可夫链近似。但是我在 R 中有以下错误,我在 Stackoverflow 中检查了类似的问题,但仍然不知道如何解决它。任何帮助将不胜感激。

该错误来自我想在 for 循环中找到所有“u”中的最小值的地方。

具体来说,在uit-for-loop, 对于每一个 nextuit我可以得到一个新的单个值(我想)temp,并想将它与单个值变量存储的临时最小值进行比较vmin。这就是if-else句子中的想法。

最好跳过参数设置和初始化过程。

0 投票
1 回答
270 浏览

algorithm - N 面晶粒 MDP 问题 需要价值迭代解决方案

我正在为我的一门课解决一个问题。问题是这样的:一个人从 0 美元开始,掷一个 N 面骰子(N 的范围可以从 1 到 30),然后根据他们掷出的骰子面来赢钱。N面骰子的X面(一个)导致该人输掉所有钱(当前余额)并结束游戏;例如,如果骰子是 [0,0,0,1,1,1,1],一个人如果掷出 1 将获得 1 美元,如果掷出 2 将获得 2 美元,或者如果掷出 3 将获得 3 美元,但他们会输如果他们掷出 4、5、6 或 7,则一切皆有可能。

这个 N 面骰子问题的期望值是多少?我尝试了值迭代,但似乎无法正确处理。

所以对于这个骰子 [1,1,1,0,0,0,0],我们的第一个状态(1 掷)期望值为 1/7*(4)+1/7*(5)+1/7* (6)+1/7*(7) = 3.1428

对于价值迭代,接下来我们要计算状态4(余额=$4)、状态5(余额=$5)、状态6(余额=$6)、状态7(余额=$7)的值

V(s) = Max_actions [Sum_probabilities[R(s)+V(s']]

V(4) = Max($4 {退出游戏}, 1/7*(4+4)+1/7*(4+5)+1/7*(4+6)+1/7*(4 +7) {继续播放}) -> 5.428

V(5) = Max($5 {退出游戏}, 1/7*(5+4)+1/7*(5+5)+1/7*(5+6)+1/7*(5 +7){继续播放}) -> 6

V(6) = Max($6 {退出游戏}, 1/7*(6+4)+1/7*(6+5)+1/7*(6+6)+1/7*(6 +7){继续播放}) -> 6.57

V(7) = Max($7 {退出游戏}, 1/7*(7+4)+1/7*(7+5)+1/7*(7+6)+1/7*(7 +7){继续播放}) -> 7.14

现在这些 V(4)、V(5)、V(6) 和 V(7) 将分支到它们的下一个状态。因此 V(4) 将变为 V(8)、V(9)、V(10)、V(11),依此类推。

V(8) ($8 当前< $7.74 预期), V(9) ($9 当前<$8.28 预期), V(10)($10 当前<$8.85 预期), V(11)($11 当前<$9.42 预期), V( 12)(当前 12 美元<预期 10 美元),V(13)(当前 11 美元<预期 10.57 美元),V(14)(当前 14 美元 <预期 11.14 美元)。

因此,这表明 V(8)、V(9)、V(10)、V(11)、V(12)、V(13)、V(14) 是终端状态 --> V(4), V(5)、V(6)、V(7)不需要改变。

最后,我们重新计算 V(0) 的值,因为 V(4)、V(5)、V(6) 和 V(7) 的值发生了变化 --> V(0) = 1/7 * V(4)+1/7* V(5)+1/7* V(6)+1/7* V(7) => 3.59 ... 这是本场比赛的最终预期奖励。

这有意义吗?我不是在寻找解决问题的代码,只是关于这种方法是否正确的一些建议。

谢谢

根据以下评论进行编辑,以使帖子更简洁。

0 投票
1 回答
43 浏览

dynamic-programming - MDP 策略迭代示例计算

我是 RL 的新手,正在听 UWaterloo的讲座。在关于 Policy Iteration 的讲座 3a 中,教授举了一个 MDP 的例子,涉及一家公司需要在 Advertise(A) 或 Save(S) 决策之间做出决策——Poor Unknown(PU)、Poor Famous(PF)、Rich Famous (RF) 和 Rich Unknown (RU),如下面的 MDP 转换图所示。 在此处输入图像描述

对于第二次迭代,n=1,“Rich and Famous”的状态值显示为 54.2。我无法通过策略迭代算法进行计算。

我的计算如下,

对于保存操作,

我在这里想念什么?

0 投票
0 回答
23 浏览

python-3.x - MDP 关于在 Python 中做出决定

我渴望在以下方面应用马尔可夫决策过程:

在钢铁厂的炼钢车间使用铁管。随着时间的推移,这些管道会生锈。添加防锈液可以延缓生锈过程。如果生锈过多,我们必须机械清洁管道。

我将生锈状态分类为 StateA、StateB、StateC、StateD,生锈从 A 到 D

我们可以采取两种可能的行动:

  • 无需维护
  • 添加防锈剂

从 StateA 到 StateB 的转移概率为 0.6,无需维护

加入防锈剂后,StateA 到 StateB 的转移概率为 0.5

从 StateB 到 StateC 的转移概率为 0.7,无需维护

加入防锈剂后,StateB 到 StateC 的转移概率为 0.6

从 StateC 到 StateD 的转移概率为 0.8,无需维护

使用防锈剂从 StateC 到 StateD 的转移概率为 0.7

StateA 的奖励是 0.3,StateB 是 0.4 StateC 是 0.5,StateD 是 0.6 Clean 本身就是一个状态。清洁状态的奖励是 0.2

我是 MDP 的新手。如果有人可以帮助我决定何时应该通过 python 实现通过 MDP 进行清理,那将会很有帮助?在 StateB 清洁,在 StateC 清洁,在 StateD 清洁

0 投票
0 回答
10 浏览

python - python中的MDP框架以做出最佳决策

我试图将以下问题建模为马尔可夫决策过程。

在钢铁厂的炼钢车间,使用铁管。随着时间的推移,这些管道会生锈。添加防锈溶液可以延缓生锈过程。如果生锈过多,我们必须对管道进行机械清洁。

我将生锈状态分类为 StateA、StateB、StateC、StateD。从 A 到 E 锈蚀增加的 StateE。StateA 是绝对干净的状态,几乎没有生锈,StateE 是最生锈/退化的状态

我们可以采取 3 种可能的行动:

  • 无需维护
  • 干净的
  • 添加防锈剂

转移概率如下所述: 状态从 StateA 降级到 StateE。状态随着生锈而退化,一定量的生锈由转移概率表示。添加防锈剂可降低状态退化的可能性

从 StateA 到 StateB 的转换概率为 0.6,无需维护 从 StateA 到 StateB 的转换概率为 0.5,添加了防锈剂。

从 StateB 到 StateC 的转换概率为 0.7,无需维护 从 StateB 到 StateC 的转换概率为 0.6,添加了防锈剂。

从 StateC 到 StateD 的转移概率为 0.8,无需维护。从 StateC 到 StateD 的转换概率为 0.7,使用防锈剂。

从 StateC 到 StateD 的转移概率为 0.8,无需维护。从 StateC 到 StateD 的转换概率为 0.7,使用防锈剂。

动作 clean 将以概率 1 将任何状态移动到状态 Mnt 。State Mnt 以概率 1 移动到 StateA(绝对清洁状态)。

StateA 的奖励是 0.6,StateB 是 0.5,StateC 是 0.4,StateD 是 0.3,StateE 是 0.2

清洁行动导致维护(Mnt)状态,该状态具有 0.1 奖励。维护状态会导致清洁后生产力提高,这很好,但维护时会停机,因此会有生产损失。所以奖励少。

如果有人可以帮助我在 python 中开发框架,那将会很有帮助。

该框架应提供有助于决定是否在 StateB、StateC、StateD、StateE 采取清洁行动的输出。我们可以使用价值迭代来生成最优决策。

0 投票
1 回答
73 浏览

machine-learning - 从均匀分布采样时没有方法匹配 logpdf

我正在尝试在 julia 中使用强化学习来教一辆不断向后加速(但初始速度为正)的汽车应用刹车,以便在向后移动之前尽可能接近目标距离。

为此,我正在使用POMDPs.jl并且crux.jl有很多求解器(我正在使用 DQN)。我将首先列出我认为是脚本的相关部分,然后在最后列出更多内容。

为了定义 MDP,我将制动器的初始位置、速度和力设置为在某些值上的均匀分布。

我的状态包含 的值(position, velocity, brake force),初始状态为:

crux.jl然后,我使用并调用一个函数来设置我的 DQN 求解器来求解策略

打电话solve()给我错误MethodError: no method matching logpdf(::Distributions.Categorical{Float64, Vector{Float64}}, ::Nothing)。我很确定这来自初始状态采样,但我不确定为什么或如何解决它。我只是在很短的时间内从各种书籍和在线讲座中学习 RL,所以任何关于错误或我设置的模型(或任何其他我忘记的东西)的帮助将不胜感激。


更全面的代码:

套餐:

其余的:

堆栈跟踪:

0 投票
0 回答
10 浏览

reinforcement-learning - 我们可以将未来的预测结果添加到强化学习的状态中吗

像ddpg一样,我们保存(s, a, r, s_next),能不能把s_next的预测结果放到s中。是否违反 MDP

0 投票
0 回答
21 浏览

python - 根据状态马尔可夫决策过程的效用查找每次运行收到的奖励

我得到了以下代码,我试图将每次运行获得的平均总奖励与状态的效用进行比较。我已经能够找到每个状态的效用,但不确定每次运行的奖励意味着什么。

另外,我想更改我的跑步的起始状态(即)而不是从(0,0)开始,它可以从(1,2)开始。我怎么去编码呢?

感谢您的任何帮助。

...