Ex4pmEngine.Alignment (ex4pm v26.9.9)

Copy Markdown View Source

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

align(trace, net_spec, opts \\ [])

Direct alignment API for trace and Petri Net / Workflow Net. Returns %Result{} with .cost and .exact_match?.

align_ocpn(ocel_events, ocpn_spec, opts \\ [])

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()]}.

align_trace(trace, net_spec, opts \\ [])

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()}}.