Supports the Markov analysis used as safety substantiation presented in ARP4761A/ED-135.
Project description
Markov Solver for Safety
This package supports the Markov analysis used as safety substantiation presented in ARP4761A/ED-135.
Markov analysis is a powerful probabilistic tool used in safety assessments, particularly within the aerospace industry, to evaluate the reliability and safety of systems over time. According to the guidelines provided in ARP4761, a standard for safety assessment of civil airborne systems, Markov analysis is utilized to model and analyze systems that may experience multiple states and transitions, especially when system components may repair and return to service.
A Markov Chain represents a system as a series of states, each with a defined probability of transitioning to another state over a given time period. In the context of safety analysis, these states often represent various operational conditions of a system—ranging from fully operational to complete failure, including intermediate degraded states. The transition rates between these states are typically governed by failure rates, repair rates, or maintenance actions.
In safety-critical systems, understanding how a system transitions between states is crucial for evaluating its reliability and safety performance. Markov analysis provides a framework to calculate the likelihood of the system being in a particular state at a given time, which is essential for predicting system behavior under normal and failure conditions.
ARP4761 recommends Markov analysis for situations where system behaviors are too complex to be accurately modeled by simpler methods like Fault Tree Analysis (FTA) or Reliability Block Diagrams (RBDs). This complexity might arise due to dependencies between components, or the ability of the system to recover from certain failures.
Installation
For installing Markov Solver for Safety, just run any of the following commands:
Basic installation
pip install markovsolver4safety
Installation with drawing feature
pip install markovsolver4safety[drawing_feature]
Usage example
Basic Initialization
>>> data = {
... "State": ["1", "2", "3", "4"],
... "Active Generator": ["Operating", "Failed", "Operating", "Failed"],
... "Standby Generator": ["Standby", "Operating", "Failed", "Failed"],
... "Consequence": ["Nominal Operation", "No Redundancy", "No Redundancy", "No Operation"]
... }
>>> model_representation = {
... 'Active Generator': {
... 'Operating': {
... 'Failed': {'value': 0.01, 'color': '#FF1744', 'symbol': '\\lambda_1'},
... 'Operating': {}
... },
... 'Failed': {
... 'Failed': {}
... }
... },
... 'Standby Generator': {
... 'Standby': {
... 'Failed': {'value': 0.001, 'symbol': '\\lambda_2^-'},
... 'Operating': {},
... 'Standby': {}
... },
... 'Operating': {
... 'Failed': {'value': 0.1, 'color': '#F57C00', 'symbol': '\\lambda_2'},
... 'Operating': {}
... },
... 'Failed': {
... 'Failed': {}
... }
... },
... 'joint_failures': [
... {
... 'components': {
... 'Active Generator': {'from': 'Operating', 'to': 'Failed'},
... 'Standby Generator': {'from': 'Standby', 'to': 'Failed'}
... },
... 'value': 0.01,
... 'symbol': '\\lambda_1'
... }
... ],
... 'state_modifiers': {
... 'p': {'value': 0.1, 'modifies': {'from': '1', 'to': '4'}},
... '(1-p)': {'value': 0.9, 'modifies': {'from': '1', 'to': '2'}}
... }
... }
>>> mc = MarkovChain(data, model_representation, has_consequences=True)
>>> print(mc.size)
4
Initialize from a csv file
>>> data_csv_path = 'path/to/data.csv' # Assuming it is equivalent to 'data' above
>>> model_representation = { ... } # Assuming it is equal to the value above
>>> mc = MarkovChain.from_csv(data_csv_path, model_representation)
>>> print(mc.size)
4
### Get the equation system in LaTeX
>>> print(mc.get_symbolic_system())
\left[\begin{array}{c}dP_{1}(t)/dt\\dP_{2}(t)/dt\\dP_{3}(t)/dt\end{array}\right]=\begin{bmatrix}-((1-p)\lambda_1+\lambda_2^-+p\lambda_1)&0&0\\(1-p)\lambda_1&-\lambda_2&0\\\lambda_2^-&0&-\lambda_1\end{bmatrix}\cdot\left[\begin{array}{c}P_{1}(t)\\P_{2}(t)\\P_{3}(t)\end{array}\right]\newline P_{4}(t) = 1 - \sum_{i=1}^{3}P_{i}(t)
$$ \left[\begin{array}{c}dP_{1}(t)/dt\dP_{2}(t)/dt\dP_{3}(t)/dt\end{array}\right]=\begin{bmatrix}-((1-p)\lambda_1+\lambda_2^-+p\lambda_1)&0&0\(1-p)\lambda_1&-\lambda_2&0\\lambda_2^-&0&-\lambda_1\end{bmatrix}\cdot\left[\begin{array}{c}P_{1}(t)\P_{2}(t)\P_{3}(t)\end{array}\right]\newline P_{4}(t) = 1 - \sum_{i=1}^{3}P_{i}(t) $$
Get graph data
>>> print(mc.get_graph_data())
{'nodes': ['1', '2', '3', '4'], 'edges': [('1', '2', '(1-p)\\lambda_1'), ('1', '3', '\\lambda_2^-'), ('1', '4', 'p\\lambda_1'), ('2', '4', '\\lambda_2'), ('3', '4', '\\lambda_1')]}
### Draw the Markov Chain in the directory of execution (as markov.svg)
>>> mc.draw()
Draw the Markov Chain in a specific path in other format than svg
>>> mc.draw(img_path = 'path/to/markov_chain.png')
Solve Markov Chain and get the info for each state
>>> print(mc.get_results_by_states(30)) # Time equal to 30 hours
{'1': 0.7189237345889834, '2': 0.06766551029955292, '3': 0.021894487072743454, '4': 0.19151626803872024}
Solve Markov Chain and get the info for each consequence
>>> print(mc.get_results_by_consequences(30)) # Time equal to 30 hours
{'Nominal Operation': 0.7189237345889834, 'No Redundancy': 0.08955999737229638, 'No Operation': 0.19151626803872024}
Release History
- 0.1.0
- First release
Roadmap
- Create corresponding classes for modelling the systems
Contributing
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork it (https://github.com/samuelglorente/markovsolver4safety/fork)
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -am 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Create a new Pull Request
License
Distributed under the GPL-3.0 license. See LICENSE
for more information.
Contact
Samuel García Lorente
Acknowledgments
Project details
Release history Release notifications | RSS feed
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
Hashes for markovsolver4safety-0.1.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6cb07f232870b4bb337d8657dedea573eb87c1ee756c0583c7850157a06f4d35 |
|
MD5 | 8a5eb5531b1b3f18431ee188ff8a079c |
|
BLAKE2b-256 | b2d503d721bd57494e256125600a6c3602a6ed424781a3276a631627d03969d9 |
Hashes for markovsolver4safety-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 40a9a735b29d502118f7cc5413b79e49b86425c8499bd569665a52b33702b512 |
|
MD5 | 73a6844304e76b045d09b04022600176 |
|
BLAKE2b-256 | 14bc32273b3e234be25cafeecd0d07b06ca865d22f3547ac9cffe55ff078e831 |