def apply(log, petri_net, initial_marking, final_marking, align_variant=alignments.DEFAULT_VARIANT, parameters=None): """ Evaluate fitness based on alignments Parameters ---------------- log Event log petri_net Petri net initial_marking Initial marking final_marking Final marking align_variant Variants of the alignments to apply parameters Parameters of the algorithm Returns --------------- dictionary Containing two keys (percFitTraces and averageFitness) """ if align_variant == decomp_alignments.Variants.RECOMPOS_MAXIMAL.value: alignment_result = decomp_alignments.apply(log, petri_net, initial_marking, final_marking, variant=align_variant, parameters=parameters) else: alignment_result = alignments.apply(log, petri_net, initial_marking, final_marking, variant=align_variant, parameters=parameters) return evaluate(alignment_result)
def execute_script(): # import the a32f0n00 log log = xes_importer.apply( os.path.join("..", "tests", "compressed_input_data", "09_a32f0n00.xes.gz")) # discover a model using the inductive miner net, im, fm = inductive_miner.apply(log) # apply the alignments decomposition with a maximal number of border disagreements set to 5 aa = time.time() aligned_traces = dec_align.apply( log, net, im, fm, parameters={ dec_align.Variants.RECOMPOS_MAXIMAL.value.Parameters.PARAM_THRESHOLD_BORDER_AGREEMENT: 5 }) bb = time.time() print(bb - aa) # print(aligned_traces) # calculate the fitness over the recomposed alignment (use the classical evaluation) fitness = rep_fit.evaluate(aligned_traces, variant=rep_fit.Variants.ALIGNMENT_BASED) print(fitness)
def test_decomp_alignment(self): log = xes_importer.apply( os.path.join("input_data", "running-example.xes")) from pm4py.algo.discovery.alpha import algorithm as alpha_miner net, im, fm = alpha_miner.apply(log) from pm4py.algo.conformance.decomp_alignments import algorithm as decomp_align aligned_traces = decomp_align.apply( log, net, im, fm, variant=decomp_align.Variants.RECOMPOS_MAXIMAL)