markov
– Markov system building and description¶
-
class
fiabilipy.
Markovprocess
(components, initstates)[source]¶ Initialize the markov process management of the system.
Parameters: - components (list) – the is the list of the components to manage
- initstates (dict or list) – describes the initial state of the process, giving the initial probabilities of being in each situation
Examples
Let S be a system of two components A and B.
>>> from fiabilipy import Component >>> A, B = Component('A', 1e-2), Component('B', 1e-6) >>> comp = (A, B) >>> init = [0.8, 0.1, 0.1, 0] >>> process = Markovprocess(comp, init)
- init[0] is the probability of having A and B working
- init[1] is the probability of having A working and not B
- init[2] is the probability of having B working and not A
- init[3] is the probability of having neither A nor B working
In a general way init[i] is the probability of having:
>>> for c, state in enumerate(binary_repr(i, len(components))): >>> if state: >>> print('%s working' % components[c]) >>> else: >>> print('%s not working' % components[c])
As initstates may be very sparse, it can be given through a dictionnary as follow:
>>> init = {} >>> init[0] = 0.8 >>> init[1] = init[2] = 0.1
-
draw
(output=None)[source]¶ Print the content of the dot file needed to draw the markov process
Parameters: output (file-like object, optional) – If output is given, then the content is written into this file. output must have a write()
method.Notes
Please, see the Graphviz website to have more information about how to transform the ouput code into a nice picture.
-
value
(t, statefunc=None)[source]¶ Compute the probability of being in some states.
Parameters: - t (float) – when the probability must be computed
- state (function) – a function defining the state you want to know the probability
Examples
>>> A, B, C, D = [Component(i, 1e-3) for i in xrange(4)] >>> comp = (A, B, C, D) >>> process = Markovprocess(comp, {0:1}) >>> availablefunc = lambda x: (x[0] or x[1]) and (x[2] or x[3]) >>> process.value(100, statefunc=availablefunc) 0.98197017562069511
So, at \(t = 100\), the probability for the system to be available is approximaltly 0.982.
If you want to know, the probability, at \(t = 1000\) that all the components work but the first one, you proceed like that
>>> allbutfirstfunc = lambda x: not x[0] and x[1] and x[2] and x[3] >>> allbutfirststates = process.computestates(allbutfirstfunc) >>> process.value(1000, states=allbutfirststates) 0.031471429479129759