From 3177f3c5c6a5657772acbe046ccc98a19cdec561 Mon Sep 17 00:00:00 2001 From: Aleksandra <aleks.dimitrova.21@gmail.com> Date: Wed, 28 Jun 2023 15:17:11 +0200 Subject: [PATCH] petri net visualisation ready --- backend/__pycache__/eventlog.cpython-311.pyc | Bin 8568 -> 8568 bytes backend/__pycache__/input.cpython-311.pyc | Bin 0 -> 402 bytes backend/petrinet.py | 60 ++++++++++++++++++- 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 backend/__pycache__/input.cpython-311.pyc diff --git a/backend/__pycache__/eventlog.cpython-311.pyc b/backend/__pycache__/eventlog.cpython-311.pyc index 5a184ea042192c06e08c539c206b3c7ac6a70461..692dca41b4233f88d2bc97b67507c346874a417e 100644 GIT binary patch delta 20 bcmez2^uvjJIWI340|Ns??VH&fxpNf(N>&D$ delta 20 ccmez2^uvjJIWI340|NuY)BQ6ya_1@n08ADJ(f|Me diff --git a/backend/__pycache__/input.cpython-311.pyc b/backend/__pycache__/input.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f14b84e6bcefb3f57569b9936f2769cb4a4498ff GIT binary patch literal 402 zcmZ3^%ge>Uz`$UzVP?u{1_p-5APx*OLK&Y07#J9)Go&y?F{CiIFhnt?Fa<McGFLfp z1r(*0q~@h4lw@QUD`XZclw_nTBqb(ir{<;TDR`DB6ldlZ<WwqTl@^yM6s4Aw7Ud~q zmZ%piWabr=mgsRM!)yRq#KgeBz|6qF@R<i}TMa`BV-*7fLokCTlV6pRLPlb-LQ-mK zo<c!UesXGYacYV}QYEs5D;YEyZ?S?+E(V#a@Jln<DkiizwWv5IF();<I3~ZKB(pd^ zv7jIZ>c$wbYQ2KWTg++s`9*9D3=AM#%*VjM(7<qmTi}AQ`9*H?3oPcJK`!*uWV*#3 zAD@z+93Kx>Tm*7&5jz6|LlG+j1H&&4o80`A(wtPgB2ESd29P6)H5eEeJ}@&fGJarU UVr2Qi03x^;87)3AU=m=H0K`RP8vp<R literal 0 HcmV?d00001 diff --git a/backend/petrinet.py b/backend/petrinet.py index 23db0cc..cdfa96e 100644 --- a/backend/petrinet.py +++ b/backend/petrinet.py @@ -2,6 +2,8 @@ from pm4py.objects.petri_net.obj import PetriNet, Marking from pm4py.objects.conversion.log import converter as log_converter import pm4py import pandas as pd +import eventlog +from collections import OrderedDict def generate_petri_net(): dataframe = pd.read_csv(r'Frontend\export\eventlog.csv', sep=',') @@ -14,9 +16,61 @@ def generate_petri_net(): event_log = pm4py.convert_to_event_log(dataframe) net, initial_marking, final_marking = pm4py.discover_petri_net_inductive(event_log) - print(net) - pm4py.view_petri_net(net, initial_marking, final_marking) + # print(net) + # pm4py.view_petri_net(net, initial_marking, final_marking) + + for t in net.transitions: + print("\nTransition: "+t.name) + + return net, initial_marking, final_marking + +def decorate_petri_net(case, rec, name): + activity_mapping = { + 1: 'place order', + 2: 'arrange standard order', + 3: 'arrange custom order', + 4: 'pick from stock A', + 5: 'pick from stock B', + 6: 'pick from stock C', + 7: 'manufacture A', + 8: 'manufacture B', + 9: 'pack A', + 10: 'pack B', + 11: 'pack C', + 12: 'attempt delivery A', + 13: 'attempt delivery B', + 14: 'attempt delivery C', + 15: 'order completed', + } + + net, initial_marking, final_marking = generate_petri_net() + state = eventlog.get_state(case, name) + events = state['case'] + + event_names = [] + for i in range(len(events)): + if events[i] == 1: + event_names.append(activity_mapping[i+1]) + + decoration = {} + rec_name = activity_mapping[rec] + + for t in net.transitions: + print(str(t.label)) + if str(t.label) in event_names: + decoration.update({t: {}}) + decoration[t].update({"color":"blue"}) + decoration[t].update({"label":t.label}) + elif str(t.label) == rec_name: + decoration.update({t: {}}) + decoration[t].update({"color":"green"}) + decoration[t].update({"label":t.label}) + + + pm4py.view_petri_net(net, initial_marking, final_marking, decorations = decoration) + + +decorate_petri_net(5, 15, "optis") -generate_petri_net() -- GitLab