diff --git a/examples/inbreeding/environment.rs b/examples/inbreeding/environment.rs index ff223dfd29a0095d968e607391cbb454528db7c0..2b1feaeb8438f2fb29919a02b72056f91b9c0403 100644 --- a/examples/inbreeding/environment.rs +++ b/examples/inbreeding/environment.rs @@ -1,4 +1,4 @@ -use rand::{seq::SliceRandom, RngCore}; +use rand::{seq::SliceRandom, Rng, RngCore}; #[derive(Debug, PartialEq)] pub(super) enum Environment { @@ -20,13 +20,13 @@ impl Environment { match self { Environment::Fixed { n } => things.iter().take(things.len() - n), Environment::RandomFixed { p, n } => { - if rand::random::<f64>() > *p { + if rng.gen::<f64>() > *p { return things; } things.iter().take(things.len() - n) } Environment::RandomDynamic { p, q } => { - if rand::random::<f64>() > *p { + if rng.gen::<f64>() > *p { return things; } things diff --git a/examples/inbreeding/mod.rs b/examples/inbreeding/mod.rs index cc2f524db6edc710afcccb7e6de5d1eda75ce204..730e8f2411df4def13b4e5ee38a218548e6f0843 100644 --- a/examples/inbreeding/mod.rs +++ b/examples/inbreeding/mod.rs @@ -41,14 +41,14 @@ use komodo::{ fec::{self, Shard}, linalg::Matrix, }; -use rand::{rngs::ThreadRng, seq::SliceRandom, thread_rng, Rng, RngCore}; +use rand::{rngs::StdRng, seq::SliceRandom, Rng, RngCore, SeedableRng}; mod environment; mod strategy; use crate::{environment::Environment, strategy::Strategy}; -fn random_bytes(n: usize, rng: &mut ThreadRng) -> Vec<u8> { +fn random_bytes(n: usize, rng: &mut impl RngCore) -> Vec<u8> { (0..n).map(|_| rng.gen::<u8>()).collect() } @@ -222,6 +222,9 @@ struct Cli { measurement_schedule: usize, #[arg(long)] measurement_schedule_start: usize, + + #[arg(long)] + prng_seed: u8, } fn main() { @@ -235,7 +238,9 @@ fn main() { exit(1); } - let mut rng = thread_rng(); + let mut seed: [u8; 32] = [0; 32]; + seed[0] = cli.prng_seed; + let mut rng = StdRng::from_seed(seed); let bytes = random_bytes(cli.nb_bytes, &mut rng); diff --git a/examples/inbreeding/strategy.rs b/examples/inbreeding/strategy.rs index 0bc126424f93291adda2ea3468cdad4356c51ca9..f8f8143e63940a8bc9fdea4d01f15a72f4fed31e 100644 --- a/examples/inbreeding/strategy.rs +++ b/examples/inbreeding/strategy.rs @@ -1,4 +1,4 @@ -use rand::{seq::SliceRandom, RngCore}; +use rand::{seq::SliceRandom, Rng, RngCore}; #[derive(Debug, PartialEq)] pub(super) enum Strategy { @@ -14,7 +14,7 @@ impl Strategy { let nb_to_take = match self { Self::Single { n } => *n, Self::Double { p, n, m } => { - if rand::random::<f64>() < *p { + if rng.gen::<f64>() < *p { *n } else { *m diff --git a/scripts/inbreeding/run.nu b/scripts/inbreeding/run.nu index d6cdc5096a083f1e9426ddbedf49e0893a3d1910..bf665af17ee5e4cbfedebf31c73397a7a36e2a35 100644 --- a/scripts/inbreeding/run.nu +++ b/scripts/inbreeding/run.nu @@ -14,7 +14,8 @@ export def main [ max_t: int, strategies: list<string>, environment: string, - > + >, + --prng-seed: int = 0, ] { if $baseline { ^$BIN ...[ @@ -26,6 +27,7 @@ export def main [ --measurement-schedule-start $options.measurement_schedule_start -t $options.max_t --test-case end-to-end + --prng-seed $prng_seed ] | lines | into float | save --force baseline.nuon print "baseline saved to `baseline.nuon`" @@ -44,6 +46,7 @@ export def main [ --test-case recoding --strategy $s --environment $options.environment + --prng-seed $prng_seed ] | lines | parse "{t}, {diversity}"