Linux | Mac OS X | Windows |
---|---|---|
Ce package fournit une interface de base pour travailler avec les processus de décision de Markov (MDP) et les processus de décision de Markov partiellement observables (POMDP). Le package POMDPTools agit comme une « bibliothèque standard » pour l'interface POMDPs.jl, fournissant des implémentations de composants couramment utilisés tels que des politiques, des mises à jour de croyances, des distributions et des simulateurs.
Notre objectif est de fournir un vocabulaire de programmation commun pour :
POMDPs.jl s'intègre à d'autres écosystèmes :
Pour une introduction détaillée, consultez notre cours Julia Academy ! Pour obtenir de l'aide, veuillez publier dans l'onglet Discussions GitHub. Nous apprécions les contributions de n’importe qui ! Voir CONTRIBUTING.md pour plus d'informations sur la contribution.
POMDPs.jl et les packages de solveur associés peuvent être installés à l'aide du gestionnaire de packages de Julia. Par exemple, pour installer POMDPs.jl et le package du solveur QMDP, tapez ce qui suit dans Julia REPL :
using Pkg; Pkg . add ( " POMDPs " ); Pkg . add ( " QMDP " )
Pour exécuter une simulation simple du Tiger POMDP classique à l'aide d'une politique créée par le solveur QMDP, vous pouvez utiliser le code suivant (notez que POMDPs.jl n'est pas limité aux problèmes discrets avec des distributions explicitement définies comme celle-ci) :
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 . " )
Pour plus d'exemples et d'exemples avec des visualisations, référencez les sections Exemples et Galerie de problèmes POMDPs.jl de la documentation.
En plus du cours Julia Academy mentionné ci-dessus, une documentation détaillée et des exemples peuvent être trouvés ici.
De nombreux packages utilisent l'interface POMDPs.jl, notamment les solveurs MDP et POMDP, les outils de support et les extensions de l'interface POMDPs.jl. POMDPs.jl et tous les packages du projet JuliaPOMDP sont entièrement pris en charge sous Linux. OSX et Windows sont pris en charge pour tous les solveurs natifs*, et la plupart des solveurs non natifs devraient fonctionner, mais peuvent nécessiter une configuration supplémentaire.
POMDPs.jl lui-même contient uniquement l'interface principale pour communiquer sur les définitions de problèmes ; ces packages contiennent des implémentations de composants couramment utilisés :
Package | Build | Coverage |
---|---|---|
POMDPTools (hébergé dans ce référentiel) | ||
Filtres à particules |
De nombreux modèles ont été implémentés à l'aide de l'interface POMDPs.jl pour divers projets. Cette liste contient quelques modèles couramment utilisés :
Package | Build | Coverage |
---|---|---|
Modèles POMDP | ||
Étiquette laser | ||
Échantillon de roche | ||
BalisePOMDDPProblème | ||
Surveillance par drone | ||
ContinuumMonde | ||
VDPTag2 | ||
RoombaPOMDP (localisation Roomba) |
Package | Build/Coverage | En ligne/ Hors ligne | Continu États - Actions | Note 3 |
---|---|---|---|---|
DiscreteValueItération | Hors ligne | N.N. | ★★★★★ | |
LocalApproximationValueItération | Hors ligne | ON | ★★ | |
GlobalApproximationValueItération | Hors ligne | ON | ★★ | |
MCTS (Recherche d'arborescence de Monte Carlo) | En ligne | Y (DPW)-Y (DPW) | ★★★★ |
Package | Build/Coverage | En ligne/ Hors ligne | Continu Etats-Actions-Observations | Note 3 |
---|---|---|---|---|
QMDP (sous-optimal) | Hors ligne | NNN | ★★★★★ | |
FIB (sous-optimal) | Hors ligne | NNN | ★★ | |
BeliefGridValueItération | Hors ligne | NNN | ★★ | |
SARSOP* | Hors ligne | NNN | ★★★★ | |
NatifSARSOP | Hors ligne | NNN | ★★★★ | |
Arbres de filtres de particules (SparsePFT, PFT-DPW) | En ligne | AA 2 -Y | ★★★ | |
De basePOMCP | En ligne | ONN 1 | ★★★★ | |
ARDESPOT | En ligne | ONN 1 | ★★★★ | |
ADAOPS | En ligne | YNY | ★★★★ | |
MCVI | Hors ligne | YNY | ★★ | |
POMDPRésoudre* | Hors ligne | NNN | ★★★ | |
Élagage incrémentiel | Hors ligne | NNN | ★★★ | |
POMPPOW | En ligne | AA 2 -Y | ★★★ | |
AEMS | En ligne | NNN | ★★ | |
PointBasedValueItération | Hors ligne | NNN | ★★ |
1 : fonctionnera, mais ne convergera pas vers une solution optimale
2 : Fonctionnera, mais la convergence vers une solution optimale n'est pas prouvée, et cela ne fonctionnera probablement pas bien sur des espaces d'action multidimensionnels. Voir également https://github.com/michaelhlim/VOOTreeSearch.jl.
Package | Build/Coverage | Continu États | Continu Actes | Note 3 |
---|---|---|---|---|
TabulaireTDLearning | N | N | ★★ | |
DeepQLearning | Oui 1 | N | ★★★ |
1 : Pour les POMDP, il utilisera l'observation au lieu de l'état comme entrée de la politique.
3 Évaluation subjective ; Signalez un problème si vous pensez qu'il devrait être modifié
Package |
---|
DESPOTE |
* Ces packages nécessitent des dépendances non-Julia
Si les POMDPs sont utiles dans votre recherche et que vous souhaitez le reconnaître, veuillez citer cet article :
@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}
}