ReNunney/rust/track2-core/examples/smoke_compare.rs

72 lines
2.8 KiB
Rust

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);
}