Linux | Mac OS X | Windows |
---|---|---|
Dieses Paket bietet eine Kernschnittstelle für die Arbeit mit Markov-Entscheidungsprozessen (MDPs) und teilweise beobachtbaren Markov-Entscheidungsprozessen (POMDPs). Das POMDPTools-Paket fungiert als „Standardbibliothek“ für die POMDPs.jl-Schnittstelle und stellt Implementierungen häufig verwendeter Komponenten wie Richtlinien, Glaubensaktualisierungsprogramme, Distributionen und Simulatoren bereit.
Unser Ziel ist es, ein gemeinsames Programmiervokabular bereitzustellen für:
POMDPs.jl lässt sich in andere Ökosysteme integrieren:
Eine ausführliche Einführung finden Sie in unserem Julia Academy-Kurs! Wenn Sie Hilfe benötigen, posten Sie bitte auf der GitHub-Registerkarte „Diskussionen“. Wir freuen uns über Beiträge von jedem! Weitere Informationen zum Mitwirken finden Sie unter CONTRIBUTING.md.
POMDPs.jl und zugehörige Solver-Pakete können mit Julias Paketmanager installiert werden. Um beispielsweise POMDPs.jl und das QMDP-Solver-Paket zu installieren, geben Sie Folgendes in die Julia REPL ein:
using Pkg; Pkg . add ( " POMDPs " ); Pkg . add ( " QMDP " )
Um eine einfache Simulation des klassischen Tiger POMDP mithilfe einer vom QMDP-Solver erstellten Richtlinie auszuführen, können Sie den folgenden Code verwenden (beachten Sie, dass POMDPs.jl nicht auf diskrete Probleme mit explizit definierten Verteilungen wie dieser beschränkt ist):
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 . " )
Weitere Beispiele und Beispiele mit Visualisierungen finden Sie in den Abschnitten „Beispiele“ und „Galerie von POMDPs.jl-Problemen“ der Dokumentation.
Zusätzlich zum oben genannten Kurs der Julia Academy finden Sie hier ausführliche Dokumentationen und Beispiele.
Viele Pakete verwenden die POMDPs.jl-Schnittstelle, einschließlich MDP- und POMDP-Solver, Support-Tools und Erweiterungen der POMDPs.jl-Schnittstelle. POMDPs.jl und alle Pakete im JuliaPOMDP-Projekt werden unter Linux vollständig unterstützt. OSX und Windows werden für alle nativen Solver* unterstützt und die meisten nicht nativen Solver sollten funktionieren, erfordern jedoch möglicherweise eine zusätzliche Konfiguration.
POMDPs.jl selbst enthält nur die Kernschnittstelle für die Kommunikation über Problemdefinitionen; Diese Pakete enthalten Implementierungen häufig verwendeter Komponenten:
Package | Build | Coverage |
---|---|---|
POMDPTools (in diesem Repository gehostet) | ||
Partikelfilter |
Viele Modelle wurden mithilfe der POMDPs.jl-Schnittstelle für verschiedene Projekte implementiert. Diese Liste enthält einige häufig verwendete Modelle:
Package | Build | Coverage |
---|---|---|
POMDPModels | ||
LaserTag | ||
RockSample | ||
TagPOMDPProblem | ||
Drohnenüberwachung | ||
KontinuumWelt | ||
VDPTag2 | ||
RoombaPOMDPs (Roomba-Lokalisierung) |
Package | Build/Coverage | Online/ Offline | Kontinuierlich Zustände – Aktionen | Bewertung 3 |
---|---|---|---|---|
DiscreteValueIteration | Offline | NN | ★★★★★ | |
LocalApproximationValueIteration | Offline | YN | ★★ | |
GlobalApproximationValueIteration | Offline | YN | ★★ | |
MCTS (Monte-Carlo-Baumsuche) | Online | Y (DPW)-Y (DPW) | ★★★★ |
Package | Build/Coverage | Online/ Offline | Kontinuierlich Staaten-Aktionen-Beobachtungen | Bewertung 3 |
---|---|---|---|---|
QMDP (suboptimal) | Offline | NNN | ★★★★★ | |
FIB (suboptimal) | Offline | NNN | ★★ | |
BeliefGridValueIteration | Offline | NNN | ★★ | |
SARSOP* | Offline | NNN | ★★★★ | |
NativeSARSOP | Offline | NNN | ★★★★ | |
ParticleFilterTrees (SparsePFT, PFT-DPW) | Online | JJ 2 -J | ★★★ | |
BasicPOMCP | Online | YNN 1 | ★★★★ | |
ARDESPOT | Online | YNN 1 | ★★★★ | |
AdaOPS | Online | YNY | ★★★★ | |
MCVI | Offline | YNY | ★★ | |
POMDPSolve* | Offline | NNN | ★★★ | |
Inkrementelles Pruning | Offline | NNN | ★★★ | |
POMCPOW | Online | JJ 2 -J | ★★★ | |
AEMS | Online | NNN | ★★ | |
PointBasedValueIteration | Offline | NNN | ★★ |
1 : Wird ausgeführt, konvergiert jedoch nicht zur optimalen Lösung
2 : Wird ausgeführt, aber die Konvergenz zur optimalen Lösung ist nicht bewiesen und wird auf mehrdimensionalen Aktionsräumen wahrscheinlich nicht gut funktionieren. Siehe auch https://github.com/michaelhlim/VOOTreeSearch.jl.
Package | Build/Coverage | Kontinuierlich Staaten | Kontinuierlich Aktionen | Bewertung 3 |
---|---|---|---|---|
TabularTDLearning | N | N | ★★ | |
DeepQLearning | Ja 1 | N | ★★★ |
1 : Bei POMDPs wird die Beobachtung statt des Zustands als Eingabe für die Richtlinie verwendet.
3 Subjektive Bewertung; Melden Sie ein Problem, wenn Sie der Meinung sind, dass eines geändert werden sollte
Package |
---|
DESPOT |
* Diese Pakete erfordern Nicht-Julia-Abhängigkeiten
Wenn POMDPs für Ihre Forschung nützlich sind und Sie dies anerkennen möchten, zitieren Sie bitte dieses Dokument:
@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}
}