Linux | Mac OS X | Windows |
---|---|---|
Este pacote fornece uma interface central para trabalhar com processos de decisão de Markov (MDPs) e processos de decisão de Markov parcialmente observáveis (POMDPs). O pacote POMDPTools atua como uma "biblioteca padrão" para a interface POMDPs.jl, fornecendo implementações de componentes comumente usados, como políticas, atualizadores de crenças, distribuições e simuladores.
Nosso objetivo é fornecer um vocabulário de programação comum para:
POMDPs.jl integra-se com outros ecossistemas:
Para uma introdução detalhada, confira nosso curso Julia Academy! Para obter ajuda, poste na guia Discussões do GitHub. Aceitamos contribuições de qualquer pessoa! Consulte CONTRIBUTING.md para obter informações sobre como contribuir.
POMDPs.jl e pacotes de resolução associados podem ser instalados usando o gerenciador de pacotes de Julia. Por exemplo, para instalar o POMDPs.jl e o pacote do solucionador QMDP, digite o seguinte no Julia REPL:
using Pkg; Pkg . add ( " POMDPs " ); Pkg . add ( " QMDP " )
Para executar uma simulação simples do Tiger POMDP clássico usando uma política criada pelo solucionador QMDP, você pode usar o seguinte código (observe que POMDPs.jl não está limitado a problemas discretos com distribuições definidas explicitamente 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 obter mais exemplos e exemplos com visualizações, consulte as seções Exemplos e Galeria de problemas do POMDPs.jl da documentação.
Além do curso Julia Academy mencionado acima, documentação detalhada e exemplos podem ser encontrados aqui.
Muitos pacotes usam a interface POMDPs.jl, incluindo solucionadores MDP e POMDP, ferramentas de suporte e extensões para a interface POMDPs.jl. POMDPs.jl e todos os pacotes do projeto JuliaPOMDP são totalmente suportados no Linux. OSX e Windows são suportados por todos os solucionadores nativos*, e a maioria dos solucionadores não nativos devem funcionar, mas podem exigir configuração adicional.
O próprio POMDPs.jl contém apenas a interface principal para comunicação sobre definições de problemas; esses pacotes contêm implementações de componentes comumente usados:
Package | Build | Coverage |
---|---|---|
POMDPTools (hospedado neste repositório) | ||
Filtros de partículas |
Muitos modelos foram implementados usando a interface POMDPs.jl para vários projetos. Esta lista contém alguns modelos comumente usados:
Package | Build | Coverage |
---|---|---|
Modelos POMDP | ||
LaserTag | ||
RockSample | ||
TagPOMDPProblema | ||
Vigilância Drone | ||
ContinuumWorld | ||
VDPTag2 | ||
RoombaPOMDPs (localização do Roomba) |
Package | Build/Coverage | On-line/ Off-line | Contínuo Estados - Ações | Classificação 3 |
---|---|---|---|---|
DiscreteValueIteração | Off-line | NN | ★★★★★ | |
LocalAproximaçãoValueIteração | Off-line | SN | ★★ | |
GlobalAproximaçãoValueIteração | Off-line | SN | ★★ | |
MCTS (Pesquisa de Árvore de Monte Carlo) | On-line | Y (DPW)-Y (DPW) | ★★★★ |
Package | Build/Coverage | On-line/ Off-line | Contínuo Estados-Ações-Observações | Classificação 3 |
---|---|---|---|---|
QMDP (abaixo do ideal) | Off-line | NNN | ★★★★★ | |
FIB (abaixo do ideal) | Off-line | NNN | ★★ | |
CrençaGridValueIteração | Off-line | NNN | ★★ | |
SARSOP* | Off-line | NNN | ★★★★ | |
NativoSARSOP | Off-line | NNN | ★★★★ | |
Árvores de filtro de partículas (SparsePFT, PFT-DPW) | On-line | AA 2 -A | ★★★ | |
POMCP Básico | On-line | YNN 1 | ★★★★ | |
ARDESPOT | On-line | YNN 1 | ★★★★ | |
AdaOPS | On-line | YNY | ★★★★ | |
MCVI | Off-line | YNY | ★★ | |
POMDPSolve* | Off-line | NNN | ★★★ | |
Poda Incremental | Off-line | NNN | ★★★ | |
POMCPOW | On-line | AA 2 -A | ★★★ | |
AEMS | On-line | NNN | ★★ | |
PointBasedValueIteração | Off-line | NNN | ★★ |
1 : Será executado, mas não convergirá para a solução ideal
2 : Será executado, mas a convergência para a solução ótima não foi comprovada e provavelmente não funcionará bem em espaços de ação multidimensionais. Consulte também https://github.com/michaelhlim/VOOTreeSearch.jl.
Package | Build/Coverage | Contínuo Estados | Contínuo Ações | Classificação 3 |
---|---|---|---|---|
TabularTDLearning | N | N | ★★ | |
DeepQLearning | S 1 | N | ★★★ |
1 : Para os POMDPs, utilizará a observação em vez do estado como entrada para a política.
3 Avaliação subjetiva; Registre um problema se você acredita que um deve ser alterado
Package |
---|
DÉSPOTA |
* Esses pacotes requerem dependências que não sejam de Julia
Se os POMDPs forem úteis em sua pesquisa e você gostaria de reconhecê-los, cite este artigo:
@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}
}