use std::env; use track2_core::{Config, NunneySimulationKernel, extinction_trait::ExtinctionEstimator}; fn main() { let mut k = 1000.0; let mut n0 = 500.0; let mut r = 10.0; let mut t = 50.0; let mut n = 3usize; let mut u = 0.001; let mut epochs = 5usize; let mut seed = 0u64; let mut args = env::args().skip(1); while let Some(arg) = args.next() { match arg.as_str() { "--K" => k = args.next().expect("missing value for --K").parse().expect("invalid --K"), "--N0" => n0 = args.next().expect("missing value for --N0").parse().expect("invalid --N0"), "--R" => r = args.next().expect("missing value for --R").parse().expect("invalid --R"), "--T" => t = args.next().expect("missing value for --T").parse().expect("invalid --T"), "--n" => n = args.next().expect("missing value for --n").parse().expect("invalid --n"), "--u" => u = args.next().expect("missing value for --u").parse().expect("invalid --u"), "--epochs" => { epochs = args .next() .expect("missing value for --epochs") .parse() .expect("invalid --epochs") } "--seed" => { seed = args .next() .expect("missing value for --seed") .parse() .expect("invalid --seed") } other => panic!("unexpected argument: {other}"), } } let config = Config { K: k, N0: n0, R: r, T: t, n, u, epochs, target_extinction_probability: 0.5, seed: Some(seed), }; let kernel = NunneySimulationKernel::new(Some(seed)); let result = kernel.run(&config); println!("extinct={}", result.extinct); println!("generation={}", result.final_state.generation); println!("N={:.0}", result.final_state.N); println!("female_count={:.0}", result.final_state.N_f); println!("male_count={:.0}", result.final_state.N_m); println!("target_value={:.6}", result.final_state.optimum); println!("mean_allele_value={:.6}", result.final_state.allele_means.first().copied().unwrap_or(0.0)); println!("mean_fitness={:.6}", result.final_state.mean_fitness); println!("fecundity={:.6}", result.final_state.mean_fecundity); println!("mean_tracking_gap={:.6}", result.final_state.mean_tracking_gap); println!("birth_count={}", result.final_state.birth_count); println!("surviving_offspring_count={}", result.final_state.surviving_offspring_count); println!("first_nonzero_allele_t={:?}", result.first_nonzero_allele_t); println!("last_nonzero_allele_t={:?}", result.last_nonzero_allele_t); }