@@ 101,18 101,18 @@ pub fn evolution_algorithm<TChromosome: Clone, TResult: Clone>(
pub mod tests {
use nalgebra::Const;
- use crate::{binary_string::BinaryString, comparison::MinimizingOperator, crossover::BinaryOnePointCrossover, fitness::one_max::OneMax, initializer::{Initializer, RandomInitializer}, pairing::AdjacentPairing, perturbation::{BinaryStringBitPerturbation, MutationPerturbation}, replacement::{BestReplacement, Population}, selection::TournamentSelection};
+ use crate::{binary_string::BinaryString, comparison::MinimizingOperator, crossover::BinaryOnePointCrossover, fitness::one_max::OneMax, initializer::{Initializer, RandomInitializer}, pairing::AdjacentPairing, perturbation::{BinaryStringBitPerturbation, BinaryStringFlipPerturbation, BinaryStringSingleBitPerturbation, CombinedPerturbation, MutationPerturbation}, replacement::{BestReplacement, Population, TournamentReplacement}, selection::TournamentSelection};
use super::evolution_algorithm;
#[test]
- pub fn test_one_max() {
+ pub fn test_evolution_one_max() {
const D: usize = 512;
let optimum = BinaryString::<Const<D>>::new(vec![0; D]);
let one_max = OneMax::<Const<D>>::new();
let initializer = RandomInitializer::<Const<D>, BinaryString::<Const<D>>>::new_binary();
- let population_size = 512;
+ let population_size = 10;
let mut rng_init = rand::rng();
let population = Population::from_vec(
@@ 122,34 122,27 @@ pub mod tests {
let mut rng = rand::rng();
let result = evolution_algorithm(
population,
- population_size / 4,
+ 50,
&one_max,
- // TODO: tournament should somehow accept sorting?
- // TODO: deterministic and nondeterministic tournament ordering
- &TournamentSelection::new(3, 0.8),
+ &TournamentSelection::new(5, 0.8),
&mut AdjacentPairing::new(),
&BinaryOnePointCrossover::new(),
- &MutationPerturbation::new(
- Box::new(BinaryStringBitPerturbation::new(0.05)),
- 0.1),
- &BestReplacement::new(),
+ &CombinedPerturbation::new(
+ vec![
+ Box::new(MutationPerturbation::new(
+ Box::new(BinaryStringSingleBitPerturbation::new()),
+ 0.3)),
+ Box::new(MutationPerturbation::new(
+ Box::new(BinaryStringFlipPerturbation::new()),
+ 0.3))
+ ]
+ ),
+ &TournamentReplacement::new(5, 0.8),
&MinimizingOperator,
1000,
&mut rng
).unwrap();
- println!("{:?}", result.stats.best_candidates
- .iter()
- .map(|candidate| candidate.evaluated_chromosome.evaluation)
- .collect::<Vec<_>>());
- println!("{:?}", result.stats.best_candidates
- .iter()
- .map(|candidate| candidate.iteration)
- .collect::<Vec<_>>());
- println!("{:?}", result.population.best_candidate(&MinimizingOperator));
- println!("{:?}", result.best_candidate);
- // println!("{:?}", res);
-
assert_eq!(
result.best_candidate.evaluation,
0