A simulator for continuous-time Markov chains
Apr 9, 2016 · 1 minute read · Codingmy set of C++ programs to include a simulator for generic continuous-time Markov chains. I.e., any transition rate matrix can be used.
I extendedIf you are interested, just get the GitHub repository and compile the
whole set of programs with make all
. Documentation can be found in
the doc/
folder (check the CTMC
class).
There is a sample program src/moran_model_boundary_mutation
, that
runs the Moran model with boundary mutation (De Maio, N., Schrempf,
D., & Kosiol, C. (2015). PoMo: An Allele Frequency-Based Approach for
Species Tree Estimation. Systematic Biology, 64(6),
1018–1031. https://doi.org/10.1093/sysbio/syv048).
Using the chain is as easy as:
// Define a GNU Scientific Library Matrix object.
gsl_matrix * my_transition_rate_matrix = alloc_and_set_matrix();
CTMC my_chain(my_transition_rate_matrix, number_of_states);
my_chain.run(a_specific_time);
// Now we print some output.
my_chain.print_hitting_times(std::cout);
my_chain.print_invariant_distribution(std::cout);
If you want to log the path of the chain, you have to activate the log path upon initialization:
CTMC my_chain(my_transition_rate_matrix, number_of_states, true);
// Print the path.
my_chain.print_path(std::cout);
Logging the path is disabled by default because it uses a lot of memory.