72 lines
2.8 KiB
Rust
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);
|
|
}
|