Python library for manipulating probabilistic automata.
Project description
Probabilistic Automata
Python library for manipulating Probabilistic Automata. This library
builds upon the dfa
package.
Installation
If you just need to use probabilistic_automata
, you can just run:
$ pip install probabilistic_automata
For developers, note that this project uses the poetry python package/dependency management tool. Please familarize yourself with it and then run:
$ poetry install
Usage
The probabilistic_automata
library centers around the PDFA
object
which models a finite probabilistic transition system, e.g., a Markov
Decision Process, as a DFA
or Moore Machine over a product alphabet
over the system's actions and the environment's stochastic action.
import probabilistic_automata as PA
def transition(state, composite_action):
sys_action, env_action = composite_action
return (state + sys_action + env_action) % 2
def env_dist(state, sys_action):
"""Based on state and the system action, what are the probabilities
of the environment's action."""
return {0: 1/2, 1: 1/2} # Always a coin flip.
noisy_parity = PA.pdfa(
start=0,
label=bool,
inputs={0, 1},
env_inputs={0, 1},
outputs={0, 1},
transition=transition,
env_dist=env_dist, # Equivalently, PA.uniform({0, 1}).
)
The support and transition probabilities can easily calculated:
assert noisy_parity.support(0, 0) == {0, 1}
assert noisy_parity.transition_probs(0, 0) == {0: 1/2, 1: 1/2}
assert noisy_parity.prob(start=0, action=0, end=0) == 1/2
Dict <-> PDFA
Note that pdfa
provides helper functions for going from a dictionary
based representation of a probabilistic transition system to a PDFA
object and back.
import probabilistic_automata as PA
mapping = {
"s1": (True, {
'a': {'s1': 0.5, 's2': 0.5},
}),
"s2": (False, {
'a': {'s1': 1},
}),
}
start = "s1"
pdfa = PA.dict2pdfa(mapping=mapping, start=start)
assert pdfa.inputs == {'a'}
mapping2, start2 = PA.pdfa2dict(pdfa)
assert start == start2
assert mapping2 == mapping
DFA to PDFA
The probabilistic_automata
library has two convenience methods for
transforming a Deterministic Finite Automaton (dfa.DFA
) into a
PDFA
.
- The
lift
function simply creates aPDFA
whose transitions are deterministic and match the originaldfa.DFA
.
import probabilistic_automata as PA
from dfa import DFA
parity = DFA(
start=0,
inputs={0, 1},
label=bool,
transition=lambda s, c: (s + c) & 1,
)
parity_pdfa = lift(parity)
assert pdfa.inputs == PARITY.inputs
assert pdfa.env_inputs == {None}
- The
randomize
function takes aDFA
and returns aPDFA
modeling the actions of theDFA
being selected uniformly at random.
pdfa = PA.randomize(PARITY)
assert pdfa.inputs == {None}
assert pdfa.env_inputs == PARITY.inputs
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file probabilistic_automata-0.1.0.tar.gz
.
File metadata
- Download URL: probabilistic_automata-0.1.0.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.3 CPython/3.8.1 Linux/5.5.0-1-MANJARO
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c8fee121c520431de959f4434a91b55115ae224ea5c338dc38b4df3a19edefc |
|
MD5 | cb004748a3064b8896a48a4c0fc06e00 |
|
BLAKE2b-256 | 81f6d5dd87885a846c89d592761e812b46300cd2c260771a9e0a4c4afd49ed3e |
File details
Details for the file probabilistic_automata-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: probabilistic_automata-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.3 CPython/3.8.1 Linux/5.5.0-1-MANJARO
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 317afd8ad4ff72747daeeeb9ae10db3ed760edc2f04132c0ae0bcfd1071476a9 |
|
MD5 | ee92c59eb21aefa6717eee9488f104d3 |
|
BLAKE2b-256 | c5b22b602402fd3dd4e3815ef0f875d477788da03656b98751f11044d2f5ef60 |