A* Cost-Based Optimal Trace Alignment Engine. Faithful BEAM realization of Van der Aalst, Adriansyah, and Dongen (2012).
Finds an optimal alignment γ ∈ Γ between an observed trace σ and a Workflow Net N, minimizing the total cost of non-synchronous moves:
- Synchronous move (a, a): cost = 0.0
- Log-only move (a, ≫): cost = 1.0 (unadmitted/anomalous action performed by actor)
- Model-only move (≫, a): cost = 1.0 (required transition skipped by actor)
Calculates exact Alignment-Based Fitness: fitness(σ, N) = 1.0 - (Cost(γ) / Cost_max(σ, N))
Summary
Functions
Direct alignment API for trace and Petri Net / Workflow Net.
Returns %Result{} with .cost and .exact_match?.
Computes the optimal multi-object alignment between a sequence of OCEL events and an OCPN specification.
Avoids single-case flattening and handles object divergence/convergence.
ocel_events is a list of %{activity: String.t(), omap: [String.t()]}.
Computes the optimal alignment between trace (list of activity strings)
and a Petri Net / Workflow Net defined by {transitions, initial_marking, final_marking}.
Functions
Direct alignment API for trace and Petri Net / Workflow Net.
Returns %Result{} with .cost and .exact_match?.
Computes the optimal multi-object alignment between a sequence of OCEL events and an OCPN specification.
Avoids single-case flattening and handles object divergence/convergence.
ocel_events is a list of %{activity: String.t(), omap: [String.t()]}.
Computes the optimal alignment between trace (list of activity strings)
and a Petri Net / Workflow Net defined by {transitions, initial_marking, final_marking}.
transitions is a map of %{trans_name => %{inputs: [places], outputs: [places], label: String.t()}}.