process_discovery/
process_discovery.rs1use 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}