FunSpec4DTMC
A Tool for Modelling Discrete-Time Markov Chains (DTMCs) Using Functional Specification
We present a tool [1] for the analysis of finite discrete-time Markov chains (DTMCs). As a novelty, the tool offers functional specification of DTMCs and implements forward algorithms to compute the stationary state distribution of the DTMC or derive its transition matrix . In addition, we implement nine direct and iterative algorithms to compute various metrics of DTMCs based on including an algorithm to determine the period of the DTMC.
Main window of FunSpec4DTMC [1].
The tool is intended for production purposes as well as a platform for teaching the functional specification of DTMCs.
- Status quo: analysis tools and libraries for teaching that utilize
- Gap: Library to apply the functional specification of DTMCs
For this reason FunSpec4DTMC offers the following specification types:
- Conventional Specification of DTMCs
- Computation of consecutive state distributions
- Computation of the stationary state distribution
- Functional specification [2]
- Computation of consecutive states
- Computation of consecutive state distributions
- Advantages over conventional specification
- Python 3 library published under GPLv3
- Simulation library
- Intuitive GUI for simplified use
- Multiple project tabs, analysis dialogues, and means for visualization
- Four phases of FunSpec4DTMC’s analysis process for DTMCs
Analysis process of FunSpec4DTMC. Taken from [1].
- Direct algorithms to calculate the stationary state distribution
- Iterative algorithms to calculate the stationary state distribution
- DTMC random walk
- simulation
- Calculation of the limiting distribution
- Matrix powering
- Calculation of the Cesaro limit
- Modified calculation of the Cesaro limit [2]
- DTMC random walk
- Object-oriented class hierarchy that leverages many design patterns
- e. g.: model-view-controller, observer pattern, strategy pattern
- Minimum dependence on external libraries
- NumPy for matrix multiplication and memory mapping
- SciPy to use common distributions
- Cython for runtime optimization
- Matplotlib for figure plotting
- NetworkX for graph visualization
- PyQt5 for GUI programming