process_mining / pm4py /examples /alignment_test.py
linpershey's picture
Add 'pm4py/' from commit '80970016c5e1e79af7c37df0dd88e17587fe7bcf'
b4ba3ec
raw
history blame
2.03 kB
import os
from pm4py import util
from pm4py.algo.conformance import alignments as ali
from pm4py.algo.conformance.alignments.petri_net.variants.state_equation_a_star import Parameters
from pm4py.objects import log as log_lib
from pm4py.objects.log.importer.xes import importer as xes_importer
from pm4py.objects.petri_net.importer import importer as petri_importer
from pm4py.objects.petri_net.utils.align_utils import pretty_print_alignments
def align(trace, net, im, fm, model_cost_function, sync_cost_function):
trace_costs = list(map(lambda e: 1000, trace))
params = dict()
params[util.constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = log_lib.util.xes.DEFAULT_NAME_KEY
params[Parameters.PARAM_MODEL_COST_FUNCTION] = model_cost_function
params[Parameters.PARAM_TRACE_COST_FUNCTION] = trace_costs
params[Parameters.PARAM_SYNC_COST_FUNCTION] = sync_cost_function
return ali.petri_net.algorithm.apply_trace(trace, net, im, fm, parameters=params,
variant=ali.petri_net.algorithm.VERSION_STATE_EQUATION_A_STAR)
def execute_script():
log_path = os.path.join("..", "tests", "input_data", "running-example.xes")
pnml_path = os.path.join("..", "tests", "input_data", "running-example.pnml")
# log_path = 'C:/Users/bas/Documents/tue/svn/private/logs/a32_logs/a32f0n05.xes'
# pnml_path = 'C:/Users/bas/Documents/tue/svn/private/logs/a32_logs/a32.pnml'
log = xes_importer.apply(log_path)
net, marking, fmarking = petri_importer.apply(pnml_path)
model_cost_function = dict()
sync_cost_function = dict()
for t in net.transitions:
if t.label is not None:
model_cost_function[t] = 1000
sync_cost_function[t] = 0
else:
model_cost_function[t] = 1
alignments = []
for trace in log:
alignments.append(align(trace, net, marking, fmarking, model_cost_function, sync_cost_function))
pretty_print_alignments(alignments)
if __name__ == '__main__':
execute_script()