@@ 35,13 35,14 @@ pub fn evolution_algorithm
TResult: Clone,
const DParents: usize,
TSelection: Selection<TChromosome, TResult>,
+ TFitness: FitnessFunction<In = TChromosome, Out = TResult>,
TPairing: Pairing<DParents, Chromosome = TChromosome, Out = TResult>,
TCrossover: Crossover<DParents, Chromosome = TChromosome, Out = TResult>,
TReplacement: Replacement<TChromosome, TResult>,
TPerturbation: PerturbationOperator<Chromosome = TChromosome>>(
initial_population: Population<TChromosome>,
parents_count: usize,
- fitness: &impl FitnessFunction<In = TChromosome, Out = TResult>,
+ fitness: &mut TFitness,
selection: &mut TSelection,
pairing: &mut TPairing,
crossover: &mut TCrossover,
@@ 56,6 57,7 @@ pub fn evolution_algorithm
&EvolutionStats<TChromosome, TResult>,
&EvaluatedPopulation<TChromosome, TResult>,
+ &mut TFitness,
&mut TSelection,
&mut TPairing,
&mut TCrossover,
@@ 149,6 151,7 @@ pub fn evolution_algorithm
iteration,
&stats,
¤t_population,
+ fitness,
selection,
pairing,
crossover,
@@ 195,7 198,7 @@ pub mod tests {
let result = evolution_algorithm(
population,
50,
- &one_max,
+ &mut one_max,
&mut TournamentSelection::new(5, 0.8),
&mut AdjacentPairing::new(),
&mut BinaryOnePointCrossover::new(),
@@ 213,7 216,7 @@ pub mod tests {
&MinimizingOperator,
1000,
&mut rng,
- |_, _, _, _, _, _, _, _| ()
+ |_, _, _, _, _, _, _, _, _| ()
).unwrap();
assert_eq!(
@@ 269,7 269,7 @@ fn run_evolution_algorithm(instance: &TSPInstance<Dyn>) -> Result<PlotData, Box<
let result = evolution_algorithm(
initial_population.clone(),
parents_count,
- instance,
+ &mut instance.clone(),
&mut selection,
&mut pairing,
&mut crossover,
@@ 278,7 278,7 @@ fn run_evolution_algorithm(instance: &TSPInstance<Dyn>) -> Result<PlotData, Box<
&better_than_operator,
EA_MAX_ITERATIONS, // max iterations
&mut rng,
- |iteration, stats, _, _, _, _, perturbation, _| {
+ |iteration, stats, _, _, _, _, _, perturbation, _| {
let iters_till_end = EA_MAX_ITERATIONS - iteration + 1;
let iters_since_better =
iteration - stats.best_candidates.last().map(|c| c.iteration).unwrap_or(0);
@@ 335,7 335,7 @@ fn run_evolution_algorithm_mst(instance: &TSPInstance<Dyn>) -> Result<PlotData,
let result = evolution_algorithm(
initial_population.clone(),
parents_count,
- instance,
+ &mut instance.clone(),
&mut selection,
&mut pairing,
&mut crossover,
@@ 344,7 344,7 @@ fn run_evolution_algorithm_mst(instance: &TSPInstance<Dyn>) -> Result<PlotData,
&better_than_operator,
EA_MAX_ITERATIONS, // max iterations
&mut rng,
- |iteration, stats, _, _, _, _, perturbation, _| {
+ |iteration, stats, _, _, _, _, _, perturbation, _| {
let iters_till_end = EA_MAX_ITERATIONS - iteration + 1;
let iters_since_better =
iteration - stats.best_candidates.last().map(|c| c.iteration).unwrap_or(0);
@@ 401,7 401,7 @@ fn run_evolution_algorithm_nn(instance: &TSPInstance<Dyn>) -> Result<PlotData, B
let result = evolution_algorithm(
initial_population.clone(),
parents_count,
- instance,
+ &mut instance.clone(),
&mut selection,
&mut pairing,
&mut crossover,
@@ 410,7 410,7 @@ fn run_evolution_algorithm_nn(instance: &TSPInstance<Dyn>) -> Result<PlotData, B
&better_than_operator,
EA_MAX_ITERATIONS, // max iterations
&mut rng,
- |iteration, stats, _, _, _, _, perturbation, _| {
+ |iteration, stats, _, _, _, _, _, perturbation, _| {
let iters_till_end = EA_MAX_ITERATIONS - iteration + 1;
let iters_since_better =
iteration - stats.best_candidates.last().map(|c| c.iteration).unwrap_or(0);
@@ 467,7 467,7 @@ fn run_evolution_algorithm_cx(instance: &TSPInstance<Dyn>) -> Result<PlotData, B
let result = evolution_algorithm(
initial_population.clone(),
parents_count,
- instance,
+ &mut instance.clone(),
&mut selection,
&mut pairing,
&mut crossover,
@@ 476,7 476,7 @@ fn run_evolution_algorithm_cx(instance: &TSPInstance<Dyn>) -> Result<PlotData, B
&better_than_operator,
EA_MAX_ITERATIONS, // max iterations
&mut rng,
- |_iteration, _stats, _, _, _, _, _perturbation, _| {
+ |_iteration, _stats, _, _, _, _, _, _perturbation, _| {
// No adaptive perturbation changes - keep probabilities constant
}
)?;
@@ 525,7 525,7 @@ fn run_evolution_algorithm_pmx(instance: &TSPInstance<Dyn>) -> Result<PlotData,
let result = evolution_algorithm(
initial_population.clone(),
parents_count,
- instance,
+ &mut instance.clone(),
&mut selection,
&mut pairing,
&mut crossover,
@@ 534,7 534,7 @@ fn run_evolution_algorithm_pmx(instance: &TSPInstance<Dyn>) -> Result<PlotData,
&better_than_operator,
EA_MAX_ITERATIONS, // max iterations
&mut rng,
- |_iteration, _stats, _, _, _, _, _perturbation, _| {
+ |_iteration, _stats, _, _, _, _, _, _perturbation, _| {
// No adaptive perturbation changes - keep probabilities constant
}
)?;
@@ 583,7 583,7 @@ fn run_evolution_algorithm_erx(instance: &TSPInstance<Dyn>) -> Result<PlotData,
let result = evolution_algorithm(
initial_population.clone(),
parents_count,
- instance,
+ &mut instance.clone(),
&mut selection,
&mut pairing,
&mut crossover,
@@ 592,7 592,7 @@ fn run_evolution_algorithm_erx(instance: &TSPInstance<Dyn>) -> Result<PlotData,
&better_than_operator,
EA_MAX_ITERATIONS, // max iterations
&mut rng,
- |_iteration, _stats, _, _, _, _, _perturbation, _| {
+ |_iteration, _stats, _, _, _, _, _, _perturbation, _| {
// No adaptive perturbation changes - keep probabilities constant
}
)?;
@@ 638,14 638,14 @@ fn run_evolution_algorithm_binary(instance: &TSPInstance<Dyn>) -> Result<PlotDat
let initial_population = initializer.initialize(input_dimension, population_size, &mut rng);
let initial_population = eoa_lib::population::Population::from_vec(initial_population);
- let fitness = TSPBinaryStringWrapper::new(instance, input_dimension, output_dimension).unwrap();
+ let mut fitness = TSPBinaryStringWrapper::new(instance, input_dimension, output_dimension).unwrap();
// Run evolution algorithm
let parents_count = EA_PARENTS_COUNT;
let result = evolution_algorithm(
initial_population.clone(),
parents_count,
- &fitness,
+ &mut fitness,
&mut selection,
&mut pairing,
&mut crossover,
@@ 654,7 654,7 @@ fn run_evolution_algorithm_binary(instance: &TSPInstance<Dyn>) -> Result<PlotDat
&better_than_operator,
EA_MAX_ITERATIONS, // max iterations
&mut rng,
- |iteration, stats, _, _, _, _, perturbation, _| {
+ |iteration, stats, _, _, _, _, _, perturbation, _| {
let iters_till_end = EA_MAX_ITERATIONS - iteration + 1;
let iters_since_better =
iteration - stats.best_candidates.last().map(|c| c.iteration).unwrap_or(0);