Skip to main content

process_discovery/
process_discovery.rs

1use process_mining::core::event_data::case_centric::utils::activity_projection::EventLogActivityProjection;
2use process_mining::discovery::case_centric::alphappp::full::{
3    alphappp_discover_petri_net, AlphaPPPConfig,
4};
5use process_mining::{EventLog, Exportable, Importable};
6use std::env;
7use std::error::Error;
8use std::path::PathBuf;
9
10fn main() -> Result<(), Box<dyn Error>> {
11    let args: Vec<String> = env::args().collect();
12    if args.len() != 3 {
13        eprintln!("Usage: {} <path_to_event_log> <output_pnml_path>", args[0]);
14        std::process::exit(1);
15    }
16
17    let input_path = PathBuf::from(&args[1]);
18    let output_path = PathBuf::from(&args[2]);
19
20    println!("Importing event log from {:?}", input_path);
21    let log = EventLog::import_from_path(&input_path)?;
22
23    println!("Converting to activity projection...");
24    let projection = EventLogActivityProjection::from(&log);
25
26    println!("Discovering Petri net using Alpha+++...");
27    let config = AlphaPPPConfig::default();
28    let petri_net = alphappp_discover_petri_net(&projection, config);
29
30    println!(
31        "Discovered Petri net with {} places and {} transitions.",
32        petri_net.places.len(),
33        petri_net.transitions.len()
34    );
35
36    println!("Exporting Petri net to {:?}", output_path);
37    petri_net.export_to_path(&output_path)?;
38
39    println!("Done!");
40    Ok(())
41}