diff --git a/src/learner.rs b/src/learner.rs index 596c8cf..fb14647 100644 --- a/src/learner.rs +++ b/src/learner.rs @@ -23,7 +23,34 @@ impl Learner { iterations: iterations.unwrap_or(200), } } - fn get_similarity(expected_output: Vec, real_output: Vec) -> Result { + pub fn iterate(&self) -> Formula { + let mut formulas: Vec<(Formula, f64)> = vec![]; + for _ in 0..self.formulas_per_iteration { + let mut formula = self.best_algorithm.clone(); + Learner::mutate_formula_randomly(&mut formula); + let outputs = formula.run(self.inputs.clone()); + formulas.push(( + formula, + Learner::get_similarity(&self.expected_outputs, &outputs).unwrap(), + )); + } + formulas + .iter() + .max_by(|x, y| { + if x.1 > y.1 { + std::cmp::Ordering::Greater + } else if x.1 < y.1 { + std::cmp::Ordering::Less + } else { + std::cmp::Ordering::Equal + } + }) + .unwrap() + .0 + .clone() + } + fn mutate_formula_randomly(formula: &mut Formula) {} + fn get_similarity(expected_output: &Vec, real_output: &Vec) -> Result { if expected_output.len() != real_output.len() { return Err(()); }