class PaperExample(unittest.TestCase):
    # Constructing the Petri Net from
    log = xes_importer.import_log(os.path.join("paper_log.xes"))

    net1, im1, fm1 = petri_importer.apply("fig1.pnml")
    #x=generalization.apply(log, net1, im1, fm1)
    net2, im2, fm2 = petri_importer.apply("fig2.pnml")
    net3, im3, fm3 = petri_importer.apply("fig3.pnml")
    net4, im4, fm4 = petri_importer.apply("fig4.pnml")
    net5, im5, fm5 = petri_importer.apply("fig5.pnml")
    net6, im6, fm6 = petri_importer.apply("fig6.pnml")
    net7, im7, fm7 = petri_importer.apply("fig7.pnml")
    net8, im8, fm8 = petri_importer.apply("fig8.pnml")

    #3std

    ##    precision tests
    def test_precision_figure1(self):
        fac = Quality_dimension_factory(self.log, self.net1, self.im1,
                                        self.fm1)
        fac.compute_alignments_of_length()
        self.assertAlmostEqual(fac.apply(alpha_generalization=None),
                               0.871,
                               places=3)
#

    def test_precision_figure2(self):
        fac = Quality_dimension_factory(self.log, self.net2, self.im2,
                                        self.fm2)
        fac.compute_alignments_of_length()
        self.assertAlmostEqual(fac.apply(alpha_generalization=None),
                               1.000,
                               places=3)

#    def test_precision_figure5(self): #AssertionError: 0.8714285714285714 != 0.8 within 3 places (0.0714285714285714 difference)
#        self.assertAlmostEqual(Quality_dimension_factory(self.log, self.net5, self.im5, self.fm5).apply(alpha_generalization=None), 0.800, places=3)

#    def test_precision_figure6(self): #AssertionError: 0.6184981684981685 != 0.588 within 3 places
#        fac=Quality_dimension_factory(self.log, self.net6, self.im6, self.fm6)
#        fac.compute_alignments_of_length()
#        self.assertAlmostEqual(fac.apply(alpha_generalization=None), 0.588, places=3)

##
#    def test_precision_figure8(self): #Problem: State space of Reachbility graph
#        fac=Quality_dimension_factory(self.log, self.net8, self.im8, self.fm8)
#        fac.compute_alignments_of_length()
#        self.assertAlmostEqual(fac.apply(alpha_generalization=None), 0.033, places=3)

#
#    #generalisation_tests

    def test_generalization_figure1(self):
        fac = Quality_dimension_factory(self.log, self.net1, self.im1,
                                        self.fm1)
        fac.compute_alignments_of_length()
        self.assertAlmostEqual(fac.apply(alpha_precision=None),
                               0.206,
                               places=3)

#

    def test_generalization_figure2(self):
        fac = Quality_dimension_factory(self.log, self.net2, self.im2,
                                        self.fm2)
        fac.compute_alignments_of_length()
        self.assertAlmostEqual(fac.apply(alpha_precision=None),
                               0.000,
                               places=3)
Exemple #2
0
import warnings

import warnings

warnings.filterwarnings("ignore")

sys.path.insert(
    1,
    'C:\\Users\\USER\\Documents\\Vorlesungen\\Conformance Checking\\lab-anti-alignment'
)  # path where the project is when no IDE is used
from anti_alignment.quality_dimensions.quality_dimension_factory import Quality_dimension_factory
import numpy as np

log = xes_importer.import_log(os.path.join("../test/test_one/paper_log.xes"))

net, im, fm = petri_importer.apply("../test/test_one/fig1.pnml")

start = 0.1
end = 1
intervall = 0.1
calc = True
if calc:
    #factories=[]*((end-start)/intervall)
    factories = {}
    precision = {}
    generalisation = {}
    k_vals = np.arange(start, end, intervall)
    for k in k_vals:
        fac = Quality_dimension_factory(log, net, im, fm)
        fac.compute_alignments_of_length(15)
        factories[15] = fac
Exemple #3
0
def biased_playout_b2(
    pn,
    f_pop,
    f_train,
    f_test,
    xes_train,
    csv_train,
):
    print("*** PLAYOUT " + str(pn) + " ***")
    f_pn = os.path.join(pn)
    net, initial_marking, final_marking = pnml_importer.apply(f_pn)
    print("Initial Marking:", initial_marking)
    print("Final Marking:", final_marking)

    player = Player(net,
                    initial_marking,
                    final_marking,
                    maxTraceLength=200,
                    rep_inv_thresh=100,
                    max_loop=3)
    gen_traces = player.play()

    print("Total Number of Variants:", len(gen_traces))
    writeVariantToFile(f_pop, gen_traces)
    print("Unique Variant Log stored in:", str(f_pop))

    max_len = 0
    for trace in gen_traces:
        if len(trace) > max_len:
            max_len = len(trace)

    test = list()
    train = list()

    gen_traces = list(gen_traces)
    gen_traces.sort(key=lambda s: -len(s))

    threshold = 0.7 * len(gen_traces)

    cnt = 0
    for trace in gen_traces:
        if cnt < threshold:
            train.append(trace)
        else:
            test.append(trace)
        cnt += 1

    print()
    print("Mean variant length size train:", np.mean([len(s) for s in train]))
    print("Mean variant length size test:", np.mean([len(s) for s in test]))
    print()
    print("Max variant length size train:", np.max([len(s) for s in train]))
    print("Max variant length size test:", np.max([len(s) for s in test]))
    print()

    writeVariantToFile(f_train, train)
    print("b2 Biased Unique Variant Log (Train, 70%) stored in:", str(f_train))

    writeVariantToFile(f_test, test)
    print("b2 Biased Unique Variant Log (Test, 30%) stored in:", str(f_test))

    prepare_xes_csv(f_train, xes_train, csv_train)
    printStatistics(f_pop, f_train, f_test)
Exemple #4
0
def biased_playout_b4(
    pn,
    f_pop,
    f_train,
    f_test,
    xes_train,
    csv_train,
):
    print("*** PLAYOUT " + str(pn) + " ***")
    f_pn = os.path.join(pn)
    net, initial_marking, final_marking = pnml_importer.apply(f_pn)
    print("Initial Marking:", initial_marking)
    print("Final Marking:", final_marking)

    player = Player(net,
                    initial_marking,
                    final_marking,
                    maxTraceLength=200,
                    rep_inv_thresh=100,
                    max_loop=3)
    gen_traces = player.play()

    print("Total Number of Variants:", len(gen_traces))
    writeVariantToFile(f_pop, gen_traces)
    print("Unique Variant Log stored in:", str(f_pop))

    max_len = 0
    for trace in gen_traces:
        if len(trace) > max_len:
            max_len = len(trace)

    test = list()
    train = list()

    gen_traces = list(gen_traces)
    gen_traces.sort(key=lambda s: -len(s))

    threshold = 0.7 * len(gen_traces)

    cnt = 0
    for trace in gen_traces:
        if cnt < threshold:
            train.append(trace)
        else:
            test.append(trace)
        cnt += 1

    r_train = []
    r_test = []
    p_thresh = 0.75

    for t in test:
        p = np.random.uniform(0, 1, 1)[0]
        if p < p_thresh:
            r_test.append(t)
        else:
            r_train.append(t)

    required_transfers = len(r_train)
    train_transfer = random.sample(train, required_transfers)
    while np.max([len(s) for s in train_transfer]) == max_len:
        train_transfer = random.sample(train, required_transfers)
        print("resample")

    for t in train:
        if t in train_transfer:
            r_test.append(t)
        else:
            r_train.append(t)

    print()
    print("Transfer", len(train_transfer), "variants from train to test.")
    print("Mean variant length size train (before randomization):",
          np.mean([len(s) for s in train]))
    print("Mean variant length size test (before randomization):",
          np.mean([len(s) for s in test]))
    print("Mean variant length size train (after randomization):",
          np.mean([len(s) for s in r_train]))
    print("Mean variant length size test (after randomization):",
          np.mean([len(s) for s in r_test]))
    print("Size before and after randomization (train):", len(train),
          len(r_train))
    print("Size before and after randomization (test):", len(test),
          len(r_test))
    print()
    print("Max variant length size train (after randomization):",
          np.max([len(s) for s in r_train]))
    print("Max variant length size test (after randomization):",
          np.max([len(s) for s in r_test]))
    print()
    writeVariantToFile(f_train, r_train)
    print("b4 Biased Unique Variant Log (Train, 70%) stored in:", str(f_train))

    writeVariantToFile(f_test, r_test)
    print("b4 Biased Unique Variant Log (Test, 30%) stored in:", str(f_test))

    prepare_xes_csv(f_train, xes_train, csv_train)
    printStatistics(f_pop, f_train, f_test)
Exemple #5
0
def standard_playout(pn,
                     f_pop,
                     f_train,
                     f_test,
                     xes_train,
                     csv_train,
                     train_size=0.7):
    print("*** PLAYOUT " + str(pn) + " ***")
    f_pn = os.path.join(pn)
    net, initial_marking, final_marking = pnml_importer.apply(f_pn)
    print("Initial Marking:", initial_marking)
    print("Final Marking:", final_marking)

    player = Player(net,
                    initial_marking,
                    final_marking,
                    maxTraceLength=200,
                    rep_inv_thresh=100,
                    max_loop=3)
    gen_traces = player.play()

    print("Total Number of Variants:", len(gen_traces))
    writeVariantToFile(f_pop, gen_traces)
    print("Unique Variant Log stored in:", str(f_pop))

    max_len = 0
    for trace in gen_traces:
        if len(trace) > max_len:
            max_len = len(trace)

    test = list()
    train = list()
    for trace in gen_traces:
        if len(trace) == max_len:
            train.append(trace)
            gen_traces.remove(trace)
            break

    indices = [i for i in range(0, len(gen_traces))]
    train_indices, test_indices = train_test_split(indices,
                                                   train_size=train_size)

    for index, trace in enumerate(gen_traces):
        if index in train_indices:
            train.append(trace)
        else:
            test.append(trace)

    print()
    print("Mean variant length size train:", np.mean([len(s) for s in train]))
    print("Mean variant length size test:", np.mean([len(s) for s in test]))
    print()
    print("Max variant length size train:", np.max([len(s) for s in train]))
    print("Max variant length size test:", np.max([len(s) for s in test]))
    print()

    writeVariantToFile(f_train, train)
    print(
        "Unique Variant Log (Train, " + str(int(train_size * 100)) +
        "%) stored in:", str(f_train))

    writeVariantToFile(f_test, test)
    print(
        "Unique Variant Log (Test, " + str(int(
            (1 - train_size) * 100)) + "%) stored in:", str(f_test))

    prepare_xes_csv(f_train, xes_train, csv_train)
    printStatistics(f_pop, f_train, f_test)
Exemple #6
0
    'C:\\Users\\USER\\Documents\\Vorlesungen\\Conformance Checking\\lab-anti-alignment'
)

import time
from anti_alignment.quality_dimensions.quality_dimension_factory import Quality_dimension_factory
from pm4py.objects.petri.importer import factory as petri_importer
from pm4py.objects.log.importer.xes import factory as xes_importer
import os
from pm4py.evaluation.precision import factory as precision_factory
from pm4py.evaluation.generalization import factory as generalization_factory
path = "3-way match - invoice after GR - service - without SRM"
log_file = os.path.join(path, "BPI_Challenge_2019.xes")
log = xes_importer.import_log(log_file)

for model in ["02.pnml"]:
    net, im, fm = petri_importer.apply(os.path.join(path, model))
    print("Current Model: " + model)
    print("Number of places: " + str(len(list(net.places))))
    print("Number of transitions: " + str(len(list(net.transitions))))
    results = []
    fac = Quality_dimension_factory(log, net, im, fm)

    while len(results) < 1:
        start = time.time()
        fac.compute_alignments_of_length()
        (pre, gen) = fac.apply()
        end = time.time()
        results.append(end - start)
    print()
    print("Results of our approach")
    print("Precision: " + str(pre))
Exemple #7
0
    work_buffer = logstateprob.T
    for i in prange(n_states):
        work_buffer[i, :] += prev_logfwd
    # work_buffer = logstateprob.T + prev_logfwd
    cur_logfwd_est = logsumexp2d(work_buffer, axis=1)
    return cur_logfwd_est


if __name__ == '__main__':
    start_all = time.time()
    configs_df = experiment_configs2df(EXPERIMENT_CONFIGS)
    info_msg = 'Experiment configuration: \n{}'.format(configs_df)
    logger.info(info_msg)

    net_orig, init_marking_orig, final_marking_orig = pnml_importer.apply(
        NET_FP)
    net, init_marking, final_marking = pnml_importer.apply(NET_FP)
    store = pd.HDFStore(STORE_FP, mode='r')
    case_prefix_df = store['case_prefix_df']
    activity_list = sorted(case_prefix_df['activity'].unique())
    activity_cat_type = CategoricalDtype(categories=activity_list)

    logger.info('Mapping activity to integer labels')
    obs2int = dict(enumerate(activity_cat_type.categories))
    obs2int = {v: k for k, v in obs2int.items()}
    int2obs = {v: k for k, v in obs2int.items()}
    obs2int_df = pd.DataFrame(list(obs2int.items()),
                              columns=['activity', 'activity_int'])
    info_msg = 'Activity 2 int dataframe: \n{}'.format(obs2int_df)
    logger.info(info_msg)
    map_net_activity(net, obs2int)
Exemple #8
0
def py_data_2019_demo_script():
    event_data = xes_log_importer.apply('<path_to_data>')
    model, marking_i, marking_f = pn_importer.apply('<path_to_model>')
    alignments = alignment_algorithm.apply(event_data, model, marking_i, marking_f)
    print(alignments)
Exemple #9
0
def read_pnml():
    log = Log.objects.first()
    # for some reason it just works by passing the file object...
    net, init_marking, final_marking = pnml_importer.apply(log.file_pnml)
    return net, init_marking, final_marking