use rand::{SeedableRng, StdRng};
use serde::de::DeserializeOwned;
use serde::ser::Serialize;
use ea::*;
use problem::*;
use result::*;
use settings::*;
#[allow(dead_code)]
#[derive(Clone)]
pub struct EAContext<T: Individual+Serialize> {
pub settings: EASettings,
pub result: EAResult<T>,
pub population: Vec<T>,
pub fitness: Vec<f32>,
pub sel_individuals: Vec<usize>,
pub rng: StdRng,
}
impl<T: Individual+Clone+Serialize+DeserializeOwned> EAContext<T> {
pub fn new<P: Problem>(settings: EASettings, problem: &P) -> EAContext<T> {
let mut rng: StdRng = StdRng::from_seed(&[settings.rng_seed as usize]);
EAContext{population: create_population(settings.pop_size, settings.param_count, &mut rng, problem),
settings: settings,
result: EAResult::new(),
fitness: Vec::new(),
sel_individuals: Vec::new(),
rng: rng}
}
}