Spaces:
Running
Running
File size: 3,586 Bytes
e60e568 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
'''
This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de).
PM4Py is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
PM4Py is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with PM4Py. If not, see <https://www.gnu.org/licenses/>.
'''
import sys
from pm4py.objects.random_variables.basic_structure import BasicStructureRandomVariable
class Deterministic(BasicStructureRandomVariable):
"""
Describes a deterministic random variable
"""
def __init__(self, value=0):
"""
Constructor
Parameters
----------
value
Constant value of the distribution
"""
BasicStructureRandomVariable.__init__(self)
self.value = value
self.priority = 1
def read_from_string(self, distribution_parameters):
"""
Initialize distribution parameters from string
Parameters
-----------
distribution_parameters
Current distribution parameters as exported on the Petri net
"""
self.value = distribution_parameters
def get_transition_type(self):
"""
Get the type of transition associated to the current distribution
Returns
-----------
transition_type
String representing the type of the transition
"""
return "DETERMINISTIC"
def get_distribution_type(self):
"""
Get current distribution type
Returns
-----------
distribution_type
String representing the distribution type
"""
return "DETERMINISTIC"
def get_distribution_parameters(self):
"""
Get a string representing distribution parameters
Returns
-----------
distribution_parameters
String representing distribution parameters
"""
return str(self.value)
def get_value(self):
"""
Get a random value following the distribution
Returns
-----------
value
Value obtained following the distribution
"""
return self.value
def get_values(self, no_values=400):
"""
Get some random values following the distribution
Parameters
-----------
no_values
Number of values to return
Returns
----------
values
Values extracted according to the probability distribution
"""
return [self.get_value() for i in range(no_values)]
def calculate_loglikelihood(self, values, tol=0.0001):
"""
Calculate log likelihood
Parameters
------------
values
Empirical values to work on
tol
Tolerance about float values (consider them 0?)
Returns
------------
likelihood
Log likelihood that the values follows the distribution
"""
values_0 = [x for x in values if abs(x-self.value) < tol]
if len(values) == len(values_0):
return sys.float_info.max
return -sys.float_info.max
|