Skip to content
Snippets Groups Projects
Select Git revision
  • master
1 result

flexibledecomposition4pm

  • Open with
  • Download source code
  • Your workspaces

      A workspace is a virtual sandbox environment for your code in GitLab.

      No agents available to create workspaces. Please consult Workspaces documentation for troubleshooting.

  • Flexible and Hierarchical Decomposition of Workflow Nets for Process Conformance

    Overview

    The data directory contains all the models and logs used in this paper.

    The experiments directory contains the code for the new decomposition algorithm, along with scripts for running the experiments described in the paper.

    The results directory contains the results of the experiments.

    The sese-decomposer directory includes a wrapper around the ProM package AcceptingPetriNetDecomposer, which is used to create the SESE-decomposition in the experiments.

    Experiment Results

    The results for each experiment are stored in separate directories within the results directory. These directories contain several .json files, each capturing the results for a specific model. For example, A100.json contains the results for A100.pnml.

    Experiment 1

    Experiment 1 runs all fitness-checking algorithms on all model-log pairs from generated and bpm2013. Each .json file for a model-log pair contains entries for every algorithm. Inside, the runtime and results of each algorithm are provided. For the decomposed algorithms, the time taken to create the decomposition is also included.

    These results are visualized in figures 5 and 8. Figure 5 presents the runtime values, while figure 8 shows the deviation in log_fitness between the decomposed and non-decomposed algorithms.

    Experiment 2

    Experiment 2 evaluates the new decomposed algorithm and the SESE-based fitness-checking algorithms across multiple runs on A100, E100, pr-1151, and pr-1908, each time increasing the maximum subnet size. For example, the entry under decomposed > 26 > time in A100.json captures the runtime of the fitness-checking algorithm using the new decomposition with a maximum subnet size of 26. The fitness results for each run are also stored.

    Figure 7 visualizes the runtime values (time) of the new decomposition-based algorithm. Figure 9 plots the fitness values (log_fitness) against the number of subnets, which corresponds to the number of objects under the decomposition key.

    Experiment 3

    Experiment 3 compares the runtime of the new decomposed and the non-decomposed fitness-checking algorithms on the same models as Experiment 2, but using different logs to study the impact of average trace length. The names of the logs indicate the average trace length. For example, A100-m50.xes.gz has an average trace length of 50. Additionally, there is always a variant of each log with the -noise.xes.gz suffix, which includes noise; the other variant is perfectly fitting. The .json result files contain entries for every combination of average trace length and noise. For instance, in A100.json, the entry under 80 > noise > non_decomposed > time shows the runtime of the non-decomposed fitness-checking algorithm on the model A100.pnml using the log A100-m80-noise.xes.gz.

    The runtime values for these experiments are plotted in figure 6 for each of the four combinations.

    Running the Experiments

    We recommend using Docker to run the experiments. A docker-compose.yml file is provided to set up all the dependencies and environment needed.

    The experiment scripts check if the results already exist. Therefore, you should delete the contents of the results directory if you want to re-run all the experiments from scratch.

    To run the experiments, execute the following command in the root directory:

    docker compose run --build --rm flexible-decomposition

    This will open a terminal inside the container in the experiments directory. To run a specific experiment, execute the corresponding Python file. For example, to run the first experiment:

    python experiment1.py