Linux | Mac OS X | Windows |
---|---|---|
该包提供了一个用于处理马尔可夫决策过程(MDP)和部分可观察马尔可夫决策过程(POMDP)的核心接口。 POMDPTools 包充当 POMDPs.jl 接口的“标准库”,提供常用组件(例如策略、置信更新器、发行版和模拟器)的实现。
我们的目标是为以下方面提供通用的编程词汇:
POMDPs.jl 与其他生态系统集成:
如需详细介绍,请查看我们的 Julia Academy 课程!如需帮助,请在 GitHub 讨论选项卡中发帖。我们欢迎任何人的贡献!有关贡献的信息,请参阅 CONTRIBUTING.md。
可以使用 Julia 的包管理器安装 POMDPs.jl 和关联的求解器包。例如,要安装 POMDPs.jl 和 QMDP 求解器包,请在 Julia REPL 中键入以下内容:
using Pkg; Pkg . add ( " POMDPs " ); Pkg . add ( " QMDP " )
要使用 QMDP 求解器创建的策略运行经典 Tiger POMDP 的简单模拟,您可以使用以下代码(请注意,POMDPs.jl 不限于具有像这样的显式定义分布的离散问题):
using POMDPs, QuickPOMDPs, POMDPTools, QMDP
m = QuickPOMDP (
states = [ " left " , " right " ],
actions = [ " left " , " right " , " listen " ],
observations = [ " left " , " right " ],
initialstate = Uniform ([ " left " , " right " ]),
discount = 0.95 ,
transition = function (s, a)
if a == " listen "
return Deterministic (s) # tiger stays behind the same door
else # a door is opened
return Uniform ([ " left " , " right " ]) # reset
end
end ,
observation = function (s, a, sp)
if a == " listen "
if sp == " left "
return SparseCat ([ " left " , " right " ], [ 0.85 , 0.15 ]) # sparse categorical distribution
else
return SparseCat ([ " right " , " left " ], [ 0.85 , 0.15 ])
end
else
return Uniform ([ " left " , " right " ])
end
end ,
reward = function (s, a)
if a == " listen "
return - 1.0
elseif s == a # the tiger was found
return - 100.0
else # the tiger was escaped
return 10.0
end
end
)
solver = QMDPSolver ()
policy = solve (solver, m)
rsum = 0.0
for (s,b,a,o,r) in stepthrough (m, policy, " s,b,a,o,r " , max_steps = 10 )
println ( " s: $s , b: $([s => pdf (b,s) for s in states (m)]) , a: $a , o: $o " )
global rsum += r
end
println ( " Undiscounted reward was $rsum . " )
有关更多示例和可视化示例,请参考文档的示例和 POMDPs.jl 问题库部分。
除了上述 Julia Academy 课程之外,还可以在此处找到详细的文档和示例。
许多软件包使用 POMDPs.jl 接口,包括 MDP 和 POMDP 求解器、支持工具以及 POMDPs.jl 接口的扩展。 POMDPs.jl 和 JuliaPOMDP 项目中的所有包在 Linux 上得到完全支持。所有本机求解器*都支持 OSX 和 Windows,大多数非本机求解器应该可以工作,但可能需要额外的配置。
POMDPs.jl 本身仅包含用于沟通问题定义的核心接口;这些包包含常用组件的实现:
Package | Build | Coverage |
---|---|---|
POMDPTools(托管在此存储库中) | ||
粒子过滤器 |
许多模型已使用 POMDPs.jl 接口在各种项目中实现。这个列表包含了一些常用的模型:
Package | Build | Coverage |
---|---|---|
POMDP模型 | ||
激光标签 | ||
岩样 | ||
标签POMDP问题 | ||
无人机监控 | ||
连续世界 | ||
VDP标签2 | ||
RoombaPOMDP(Roomba 本地化) |
Package | Build/Coverage | 在线的/ 离线 | 连续的 状态 - 行动 | 评级3 |
---|---|---|---|---|
离散值迭代 | 离线 | 神经网络 | ★★★★★ | |
局部近似值迭代 | 离线 | 延尼 | ★★ | |
全局近似值迭代 | 离线 | 延尼 | ★★ | |
MCTS(蒙特卡罗树搜索) | 在线的 | Y (DPW)-Y (DPW) | ★★★★ |
Package | Build/Coverage | 在线的/ 离线 | 连续的 状态-行动-观察 | 评级3 |
---|---|---|---|---|
QMDP(次优) | 离线 | 神经网络 | ★★★★★ | |
FIB(次优) | 离线 | 神经网络 | ★★ | |
信念网格值迭代 | 离线 | 神经网络 | ★★ | |
SARSOP* | 离线 | 神经网络 | ★★★★ | |
本地SARSOP | 离线 | 神经网络 | ★★★★ | |
粒子过滤树(SparsePFT、PFT-DPW) | 在线的 | YY 2 -Y | ★★★ | |
基础POMCP | 在线的 | 延尼1号 | ★★★★ | |
阿德斯波特 | 在线的 | 延尼1号 | ★★★★ | |
阿达OPS | 在线的 | 元年 | ★★★★ | |
MCVI | 离线 | 元年 | ★★ | |
POMDP 求解* | 离线 | 神经网络 | ★★★ | |
增量剪枝 | 离线 | 神经网络 | ★★★ | |
聚甲基丙烯酸甲酯 | 在线的 | YY 2 -Y | ★★★ | |
原子能电磁系统 | 在线的 | 神经网络 | ★★ | |
基于点的值迭代 | 离线 | 神经网络 | ★★ |
1 :将运行,但不会收敛到最优解
2 :将运行,但尚未证明收敛到最佳解决方案,并且它可能在多维动作空间上效果不佳。另请参阅 https://github.com/michaelhlim/VOOTreeSearch.jl。
Package | Build/Coverage | 连续的 州 | 连续的 行动 | 评级3 |
---|---|---|---|---|
表格TD学习 | 氮 | 氮 | ★★ | |
深度学习 | Y 1 | 氮 | ★★★ |
1 :对于 POMDP,它将使用观察而不是状态作为策略的输入。
3主观评价;如果您认为应该更改,请提出问题
Package |
---|
暴君 |
*这些包需要非 Julia 依赖项
如果 POMDP 对您的研究有用并且您想承认它,请引用这篇论文:
@article{egorov2017pomdps,
author = {Maxim Egorov and Zachary N. Sunberg and Edward Balaban and Tim A. Wheeler and Jayesh K. Gupta and Mykel J. Kochenderfer},
title = {{POMDP}s.jl: A Framework for Sequential Decision Making under Uncertainty},
journal = {Journal of Machine Learning Research},
year = {2017},
volume = {18},
number = {26},
pages = {1-5},
url = {http://jmlr.org/papers/v18/16-300.html}
}