genx 0.4.0

An easy to use and modular genetic algorithms library.
Documentation
use rand::{Rng, SeedableRng, prelude::StdRng};

pub fn simulated_binary_crossover(parent1: f32, parent2: f32, operator: f32, seed: Option<u64>) -> (f32, f32) {
  let mut prng = match seed {
      Some(val) => StdRng::seed_from_u64(val),
      None => StdRng::from_entropy(),
  };

  let beta = |ui: f32| {
    if ui <= 0.5 {
      return  (2.0*ui).powf(1.0/(operator + 1.0));
    }
    else {
      return (1.0/(2.0*(1.0 - ui))).powf(1.0/(operator + 1.0));
    }
  };

  let ui = prng.gen::<f32>();
  let beta_ui = beta(ui);
  (0.5*((parent1+parent2) - beta_ui*(parent1-parent2)), 0.5*((parent1+parent2) + beta_ui*(parent1-parent2)))
}