• Stars
    star
    665
  • Rank 67,810 (Top 2 %)
  • Language
    Julia
  • License
    Other
  • Created over 9 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

MDPs and POMDPs in Julia - An interface for defining, solving, and simulating fully and partially observable Markov decision processes on discrete and continuous spaces.

POMDPs

Linux Mac OS X Windows
Build Status Build Status Build Status

Docs Dev-Docs Gitter Slack

This package provides a core interface for working with Markov decision processes (MDPs) and partially observable Markov decision processes (POMDPs). The POMDPTools package acts as a "standard library" for the POMDPs.jl interface, providing implementations of commonly-used components such as policies, belief updaters, distributions, and simulators.

Our goal is to provide a common programming vocabulary for:

  1. Expressing problems as MDPs and POMDPs.
  2. Writing solver software.
  3. Running simulations efficiently.

POMDPs.jl integrates with other ecosystems:

For a detailed introduction, check out our Julia Academy course! For help, please post in GitHub Discussions tab. We welcome contributions from anyone! See CONTRIBUTING.md for information about contributing.

Installation

POMDPs.jl and associated solver packages can be installed using Julia's package manager. For example, to install POMDPs.jl and the QMDP solver package, type the following in the Julia REPL:

using Pkg; Pkg.add("POMDPs"); Pkg.add("QMDP")

Quick Start

To run a simple simulation of the classic Tiger POMDP using a policy created by the QMDP solver, you can use the following code (note that POMDPs.jl is not limited to discrete problems with explicitly-defined distributions like this):

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.")

For more examples with visualization see the documentation below and POMDPGallery.jl.

Documentation and Tutorials

In addition to the above-mentioned Julia Academy course, detailed documentation can be found here.

Docs Docs

Several tutorials are hosted in the POMDPExamples repository.

Supported Packages

Many packages use the POMDPs.jl interface, including MDP and POMDP solvers, support tools, and extensions to the POMDPs.jl interface. POMDPs.jl and all packages in the JuliaPOMDP project are fully supported on Linux. OSX and Windows are supported for all native solvers*, and most non-native solvers should work, but may require additional configuration.

Tools:

POMDPs.jl itself contains only the core interface for communicating about problem definitions; these packages contain implementations of commonly-used components:

Package Build Coverage
POMDPTools (hosted in this repository) Build Status
ParticleFilters Build Status codecov.io

Implemented Models:

Many models have been implemented using the POMDPs.jl interface for various projects. This list contains a few commonly used models:

Package Build Coverage
POMDPModels CI Coverage Status
LaserTag CI Coverage Status
RockSample CI Coverage Status
DroneSurveillance Build status codecov
ContinuumWorld CI Coverage Status
VDPTag Build Status
Roomba Localization CI

MDP solvers:

Package Build/Coverage Online/
Offline
Continuous
States - Actions
Rating3
Value Iteration Build Status
Coverage Status
Offline N-N ★★★★★
Local Approximation Value Iteration Build Status
Coverage Status
Offline Y-N ★★
Global Approximation Value Iteration Build Status
Coverage Status
Offline Y-N ★★
Monte Carlo Tree Search Build Status
Coverage Status
Online Y (DPW)-Y (DPW) ★★★★

POMDP solvers:

Package Build/Coverage Online/
Offline
Continuous
States-Actions-Observations
Rating3
QMDP (suboptimal) Build Status
Coverage Status
Offline N-N-N ★★★★★
FIB (suboptimal) Build Status
Coverage Status
Offline N-N-N ★★
BeliefGridValueIteration Build Status
codecov
Offline N-N-N ★★
SARSOP* Build Status
Coverage Status
Offline N-N-N ★★★★
NativeSARSOP Build Status
Coverage Status
Offline N-N-N ★★★★
ParticleFilterTrees (SparsePFT, PFT-DPW) Build Status
codecov
Online Y-Y2-Y ★★★
BasicPOMCP Build Status
Coverage Status
Online Y-N-N1 ★★★★
ARDESPOT Build Status
Coverage Status
Online Y-N-N1 ★★★★
AdaOPS Build Status
codecov.io
Online Y-N-Y ★★★★
MCVI Build Status
Coverage Status
Offline Y-N-Y ★★
POMDPSolve* Build Status
Coverage Status
Offline N-N-N ★★
IncrementalPruning Build Status
Coverage Status
Offline N-N-N ★★★
POMCPOW Build Status
Coverage Status
Online Y-Y2-Y ★★★
AEMS Build Status
Coverage Status
Online N-N-N ★★
PointBasedValueIteration Build status
Coverage Status
Offline N-N-N ★★

1: Will run, but will not converge to optimal solution

2: Will run, but convergence to optimal solution is not proven, and it will likely not work well on multidimensional action spaces. See also https://github.com/michaelhlim/VOOTreeSearch.jl.

Reinforcement Learning:

Package Build/Coverage Continuous
States
Continuous
Actions
Rating3
TabularTDLearning Build Status
Coverage Status
N N ★★
DeepQLearning Build Status
Coverage Status
Y1 N ★★★

1: For POMDPs, it will use the observation instead of the state as input to the policy.

3 Subjective rating; File an issue if you believe one should be changed

  • ★★★★★: Reliably Computes solution for every problem.
  • ★★★★: Works well for most problems. May require some configuration, or not support every edge of interface.
  • ★★★: May work well, but could require difficult or significant configuration.
  • ★★: Not recently used (unknown condition). May not conform to interface exactly, or may have package compatibility issues
  • ★: Not known to run

Performance Benchmarks:

Package
DESPOT

*These packages require non-Julia dependencies

Citing POMDPs

If POMDPs is useful in your research and you would like to acknowledge it, please cite this paper:

@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}
}

More Repositories

1

MCTS.jl

Monte Carlo Tree Search for Markov decision processes using the POMDPs.jl framework
Julia
70
star
2

DeepQLearning.jl

Implementation of the Deep Q-learning algorithm to solve MDPs
Julia
65
star
3

POMCPOW.jl

Online solver based on Monte Carlo tree search for POMDPs with continuous state, action, and observation spaces.
Julia
52
star
4

ParticleFilters.jl

Simple particle filter implementation in Julia - works with POMDPs.jl models or others.
Julia
45
star
5

POMDPGallery.jl

A gallery of POMDPs.jl problems
Julia
44
star
6

BasicPOMCP.jl

The PO-UCT algorithm (aka POMCP) implemented in Julia
Julia
31
star
7

POMDPModels.jl

Problem models for testing POMDPs.jl
Jupyter Notebook
28
star
8

QuickPOMDPs.jl

Concise and friendly interfaces for defining MDP and POMDP models for use with POMDPs.jl solvers
Julia
28
star
9

RLInterface.jl

Interface for deep reinforcement learning
Julia
24
star
10

POMDPExamples.jl

Examples and Tutorials for POMDPs.jl
Jupyter Notebook
23
star
11

DiscreteValueIteration.jl

Value iteration solver for MDPs
Julia
20
star
12

FactoredValueMCTS.jl

Scalable MCTS for team scenarios
Julia
15
star
13

QMDP.jl

QMDP Solvers for POMDPs
Julia
15
star
14

SARSOP.jl

Julia package that wraps the SARSOP software for solving POMDPs/MDPs
Julia
13
star
15

quickpomdps

Interface for defining discrete and continuous-space MDPs and POMDPs in python. Compatible with the POMDPs.jl ecosystem.
Python
12
star
16

ARDESPOT.jl

Implementation of the AR-DESPOT POMDP algorithm
Julia
11
star
17

POMCP.jl

Julia Implementation of the POMCP algorithm for solving POMDPs
Jupyter Notebook
11
star
18

POMDPSolve.jl

A Julia wrapper for pomdp-solve that interfaces with the POMDPs.jl framework
Julia
10
star
19

LocalApproximationValueIteration.jl

Julia
10
star
20

POMDPToolbox.jl

Support tools for solving POMDPs
Julia
10
star
21

DESPOT.jl

[USE ARDESPOT.jl INSTEAD - This package is not maintained] Package implementing DESPOT POMDP solver for POMDPs.jl
Julia
9
star
22

POMDPPolicies.jl

Julia
9
star
23

POMDPSimulators.jl

Simulators for POMDPs.jl
Julia
8
star
24

POMDPModelTools.jl

Useful extensions of the POMDPs.jl interface
Julia
8
star
25

TabularTDLearning.jl

Julia implementations of temporal difference Reinforcement Learning algorithms like Q-Learning and SARSA
Julia
8
star
26

GenerativeModels.jl

Extension to POMDPs.jl for problems with a generative model (eliminates the need for distributions)
Julia
7
star
27

POMDPFiles.jl

Julia
6
star
28

ContinuumWorld.jl

A continuous gridworld-like MDP for education.
Jupyter Notebook
6
star
29

NativeSARSOP.jl

Julia
6
star
30

AEMS.jl

Anytime error minimization search for POMDPs, implemented in Julia.
Julia
6
star
31

GlobalApproximationValueIteration.jl

Julia
6
star
32

PointBasedValueIteration.jl

Point-based value iteration solver for POMDPs
Julia
6
star
33

DroneSurveillance.jl

Implementation of a drone surveillance problem with POMDPs.jl
Julia
6
star
34

FiniteHorizonPOMDPs.jl

POMDPs.jl-compatible interface for defining MDPs and POMDPs with finite horizons
Julia
5
star
35

RockSample.jl

Implement the rock sample problem using POMDPs.jl
Julia
5
star
36

SparseSampling.jl

WIP Sparse Sampling algorithm for fully and partially observable MDPs
Julia
5
star
37

BeliefUpdaters.jl

Julia
5
star
38

CompressedBeliefMDPs.jl

Compressed belief-state MDPs in Julia compatible with POMDPs.jl
Julia
5
star
39

MCVI.jl

Julia
5
star
40

POMDPLinter.jl

Tools to help develop POMDP Models
Julia
4
star
41

POMDPDistributions.jl

Implements distribution models to be used with POMDPs.jl
Julia
4
star
42

IncrementalPruning.jl

Incremental pruning solver for partially observable Markov decision processes
Julia
4
star
43

MOMDPs.jl

An extension of POMDPs.jl for Mixed Observability MDPs
Julia
4
star
44

POMDPReinforce.jl

Wrapper that turns POMDPs.jl problems into Reinforce.jl environments
Julia
4
star
45

POMDPXFiles.jl

Package for generating and parsing .pomdpx files for SARSOP
Julia
4
star
46

LaserTag.jl

Jupyter Notebook
4
star
47

MultiAgentPOMDPs.jl

Julia
3
star
48

DynamicDecisionNetworks.jl

Interface for dynamic decision networks in Julia
Julia
3
star
49

POMDPTools.jl

Tools for defining and working with POMDPs.jl models.
Julia
3
star
50

BeliefGridValueIteration.jl

Offline POMDP solver computing an upper bound of the value function in a discretized belief space.
Julia
3
star
51

POMDPTesting.jl

Julia
3
star
52

FiniteHorizonValueIteration.jl

Julia
2
star
53

SARSOP_jll.jl

Julia
2
star
54

juliapomdp.github.io

Website
HTML
2
star
55

POMDPGifs.jl

Utilities for generating gifs of POMDPs
Julia
2
star
56

Registry

Julia
2
star
57

POMDPBounds.jl

Extension to POMDPs.jl for solvers that use lower and upper bounds on the value function
Julia
2
star
58

MultiAgentSysAdmin.jl

Julia
2
star
59

maintenance-tools

Various tools for maintaining the repositories owned by JuliaPOMDP
Julia
2
star
60

FIB.jl

Fast informed bound solver for POMDPs.
Julia
2
star
61

MultiUAVDelivery.jl

Julia
2
star
62

BlinkPOMDPSimulator.jl

POMDPs.jl Simulator that displays a visualization via Blink.jl
Julia
2
star
63

MonteCarloTreeSearch.jl

Monte Carlo Tree Search for Markov decision processes using the CommonRLInterface
Julia
1
star