Linux | Mac OS X | Windows |
---|---|---|
Este paquete proporciona una interfaz central para trabajar con procesos de decisión de Markov (MDP) y procesos de decisión de Markov parcialmente observables (POMDP). El paquete POMDPTools actúa como una "biblioteca estándar" para la interfaz POMDPs.jl y proporciona implementaciones de componentes de uso común, como políticas, actualizadores de creencias, distribuciones y simuladores.
Nuestro objetivo es proporcionar un vocabulario de programación común para:
POMDPs.jl se integra con otros ecosistemas:
Para obtener una introducción detallada, consulte nuestro curso de Julia Academy. Para obtener ayuda, publique en la pestaña Discusiones de GitHub. ¡Agradecemos las contribuciones de cualquiera! Consulte CONTRIBUTING.md para obtener información sobre cómo contribuir.
POMDPs.jl y los paquetes de resolución asociados se pueden instalar utilizando el administrador de paquetes de Julia. Por ejemplo, para instalar POMDPs.jl y el paquete de solución QMDP, escriba lo siguiente en Julia REPL:
using Pkg; Pkg . add ( " POMDPs " ); Pkg . add ( " QMDP " )
Para ejecutar una simulación simple del Tiger POMDP clásico usando una política creada por el solucionador QMDP, puede usar el siguiente código (tenga en cuenta que POMDPs.jl no se limita a problemas discretos con distribuciones definidas explícitamente como esta):
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 . " )
Para obtener más ejemplos y ejemplos con visualizaciones, consulte las secciones Ejemplos y Galería de problemas de POMDPs.jl de la documentación.
Además del curso de Julia Academy mencionado anteriormente, puede encontrar documentación detallada y ejemplos aquí.
Muchos paquetes utilizan la interfaz POMDPs.jl, incluidos los solucionadores de MDP y POMDP, herramientas de soporte y extensiones de la interfaz POMDPs.jl. POMDPs.jl y todos los paquetes del proyecto JuliaPOMDP son totalmente compatibles con Linux. OSX y Windows son compatibles con todos los solucionadores nativos*, y la mayoría de los solucionadores no nativos deberían funcionar, pero pueden requerir configuración adicional.
POMDPs.jl en sí contiene sólo la interfaz principal para comunicarse sobre definiciones de problemas; Estos paquetes contienen implementaciones de componentes de uso común:
Package | Build | Coverage |
---|---|---|
POMDPTools (alojado en este repositorio) | ||
Filtros de partículas |
Se han implementado muchos modelos utilizando la interfaz POMDPs.jl para varios proyectos. Esta lista contiene algunos modelos de uso común:
Package | Build | Coverage |
---|---|---|
POMDPModelos | ||
Etiqueta láser | ||
muestra de roca | ||
EtiquetaPOMDPProblema | ||
DroneVigilancia | ||
Mundo continuo | ||
VDPTag2 | ||
RoombaPOMDP (localización de Roomba) |
Package | Build/Coverage | En línea/ Desconectado | Continuo Estados - Acciones | Calificación 3 |
---|---|---|---|---|
Iteración de valor discreto | Desconectado | NN | ★★★★★ | |
Iteración de valor de aproximación local | Desconectado | SN | ★★ | |
Iteración de valor de aproximación global | Desconectado | SN | ★★ | |
MCTS (Búsqueda de árboles de Montecarlo) | En línea | Y (DPW)-Y (DPW) | ★★★★ |
Package | Build/Coverage | En línea/ Desconectado | Continuo Estados-Acciones-Observaciones | Calificación 3 |
---|---|---|---|---|
QMDP (subóptimo) | Desconectado | NNN | ★★★★★ | |
FIB (subóptimo) | Desconectado | NNN | ★★ | |
CreenciaGridValueIteración | Desconectado | NNN | ★★ | |
SRASOP* | Desconectado | NNN | ★★★★ | |
NativoSARSOP | Desconectado | NNN | ★★★★ | |
Árboles de filtros de partículas (SparsePFT, PFT-DPW) | En línea | AA 2 -Y | ★★★ | |
POMCP Básico | En línea | YNN 1 | ★★★★ | |
ARDESPOT | En línea | YNN 1 | ★★★★ | |
AdaOPS | En línea | YNY | ★★★★ | |
MCVI | Desconectado | YNY | ★★ | |
POMDPSolucionar* | Desconectado | NNN | ★★★ | |
Poda incremental | Desconectado | NNN | ★★★ | |
POMCPOW | En línea | AA 2 -Y | ★★★ | |
AEMAS | En línea | NNN | ★★ | |
Iteración de valor basada en puntos | Desconectado | NNN | ★★ |
1 : Se ejecutará, pero no convergerá a la solución óptima.
2 : Se ejecutará, pero no se ha demostrado la convergencia hacia una solución óptima y probablemente no funcionará bien en espacios de acción multidimensionales. Véase también https://github.com/michaelhlim/VOOTreeSearch.jl.
Package | Build/Coverage | Continuo Estados | Continuo Comportamiento | Calificación 3 |
---|---|---|---|---|
Aprendizaje TabularTDL | norte | norte | ★★ | |
Aprendizaje profundoQ | Y 1 | norte | ★★★ |
1 : Para los POMDP, utilizará la observación en lugar del estado como entrada a la política.
3 Calificación subjetiva; Presente un problema si cree que se debe cambiar uno
Package |
---|
DÉSPOTA |
* Estos paquetes requieren dependencias que no sean de Julia
Si los POMDP son útiles en su investigación y desea reconocerlo, cite este artículo:
@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}
}