diff --git a/oxigen/Cargo.toml b/oxigen/Cargo.toml index 55548dd..939f8e4 100644 --- a/oxigen/Cargo.toml +++ b/oxigen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "oxigen" -version = "2.1.1" +version = "2.1.2" authors = ["Martin1887 "] description = "Fast, parallel, extensible and adaptable genetic algorithm library." repository = "https://github.com/Martin1887/oxigen" diff --git a/oxigen/src/population_refitness.rs b/oxigen/src/population_refitness.rs index 4474d51..eb3fe74 100644 --- a/oxigen/src/population_refitness.rs +++ b/oxigen/src/population_refitness.rs @@ -77,35 +77,26 @@ impl> PopulationRefitness let current_ind = &population[individual_index].ind; let current_fitness = &population[individual_index].fitness; let mut current_fitness = current_fitness.unwrap().original_fitness; - /* - let avg_sim: f64 = population - .par_iter() - .enumerate() - .filter(|(i, _ind)| *i != individual_index) - .map(|(_i, ind)| current_ind.similarity(&ind.0)) - .sum::() - / (population.len() as f64 - 1.0); - */ - let m = population - .par_iter() - .enumerate() - .filter(|(i, _ind)| *i != individual_index) - .map(|(_i, ind)| current_ind.distance(&ind.ind)) - .map(|d| { - if d >= sigma.0 { - 0.0 - } else { - 1.0 - (d / sigma.0).powf(alfa.0) - } - }) - .sum::(); if current_fitness > 0.0 { + let mut m = population + .par_iter() + .enumerate() + .filter(|(i, _ind)| *i != individual_index) + .map(|(_i, ind)| current_ind.distance(&ind.ind)) + .map(|d| { + if d >= sigma.0 { + 0.0 + } else { + 1.0 - (d / sigma.0).powf(alfa.0) + } + }) + .sum::(); current_fitness = current_fitness.powf(beta.rate(generation, progress, n_solutions)); - if m > 0.0 { - current_fitness /= m; + if m == 0.0 { + m = f64::EPSILON; } - current_fitness + current_fitness / m } else { current_fitness }