File size: 1,929 Bytes
8097001
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import pm4py
from pm4py.algo.filtering.dfg import dfg_filtering
from pm4py.algo.simulation.playout.dfg.variants import classic as dfg_playout
from examples import examples_conf
import importlib.util
import os


def execute_script():
    log = pm4py.read_xes(os.path.join("..", "tests", "input_data", "receipt.xes"))
    activities = pm4py.get_event_attribute_values(log, "concept:name")
    dfg, sa, ea = pm4py.discover_dfg(log)
    # filters the DFG to make a simpler one
    perc = 0.5
    dfg, sa, ea, activities = dfg_filtering.filter_dfg_on_activities_percentage(dfg, sa, ea, activities, perc)
    dfg, sa, ea, activities = dfg_filtering.filter_dfg_on_paths_percentage(dfg, sa, ea, activities, perc)
    # creates the simulated log
    simulated_log = dfg_playout.apply(dfg, sa, ea)
    print(simulated_log)
    print(len(simulated_log))
    print(sum(x.attributes["probability"] for x in simulated_log))
    # shows the two DFGs to show that they are identical

    if importlib.util.find_spec("graphviz"):
        pm4py.view_dfg(dfg, sa, ea, log=log, format=examples_conf.TARGET_IMG_FORMAT)
    new_dfg, new_sa, new_ea = pm4py.discover_dfg(simulated_log)

    if importlib.util.find_spec("graphviz"):
        pm4py.view_dfg(new_dfg, new_sa, new_ea, log=simulated_log, format=examples_conf.TARGET_IMG_FORMAT)

    for trace in simulated_log:
        print(list(x["concept:name"] for x in trace))
        print(trace.attributes["probability"], dfg_playout.get_trace_probability(trace, dfg, sa, ea))
        break
    dfg, sa, ea = pm4py.discover_dfg(log)
    variants = pm4py.get_variants_as_tuples(log)
    sum_prob_log_variants = 0.0
    for var in variants:
        sum_prob_log_variants += dfg_playout.get_trace_probability(variants[var][0], dfg, sa, ea)
    print("percentage of behavior allowed from DFG that is in the log (from 0.0 to 1.0): ", sum_prob_log_variants)


if __name__ == "__main__":
    execute_script()