#state #simulation #hash #probability #distribution #random #transition #generator #walk

entromatica

Entromatica is a library for constructing, simulating and analyzing markov chains

39 releases (5 stable)

2.3.0 May 17, 2023
2.1.0 Mar 23, 2023
1.0.1 Mar 9, 2023
0.24.0 Mar 9, 2023
0.14.2 Dec 22, 2022

#532 in Algorithms

Download history 10/week @ 2023-05-21 48/week @ 2023-05-28 43/week @ 2023-06-04 3/week @ 2023-06-11 40/week @ 2023-06-18 39/week @ 2023-06-25 42/week @ 2023-07-02 3/week @ 2023-07-23 1/week @ 2023-07-30 12/week @ 2023-08-06 39/week @ 2023-08-13 39/week @ 2023-08-27 80/week @ 2023-09-03

158 downloads per month

MIT/Apache

57KB
922 lines

Entromatica

GitHub Workflow Status Crates.io Crates.io GitHub release (latest SemVer including pre-releases) API Docs

Entromatica is a library for constructing, simulating and analyzing markov chains.

It is split into two main parts: the simulation module and the models module collection.

The simulation module contains primarily the Simulation struct, which takes an initial state and a StateTransitionGenerator. This generator is a function that takes a state and returns a list of the next states in the markov chain with their respective relative probabilities.

The models module contains a collection of structs and functions that try to make constructing the state transition generator easier. Currently this includes only a single model: rules.

// This is a simple onedimensional random walk
use entromatica::prelude::*;
use std::sync::Arc;

// The initial state. It has to be Hash + Clone + Send + Sync + PartialEq + Eq + Debug
let initial_state: i32 = 0;

// The state transition generator. The simulation panics if the probabilities don't sum up to 1.0
let state_transition_generator =
Arc::new(|state: i32| vec![(state + 1, "next", 0.5), (state - 1, "previous", 0.5)]);

let mut simulation = Simulation::new(initial_state, state_transition_generator);

// The Shannon-entropy at the given time
assert_eq!(simulation.entropy(0), 0.0);
simulation.next_step();
assert_eq!(simulation.entropy(1), 1.0);

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~6.5MB
~131K SLoC