@@ 277,10 277,10 @@ pub fn plot_fitness_evolution(file: &str, stats: LocalSearchStats<SVector<f64, 2
pub mod tests {
use nalgebra::SVector;
- use crate::{binary_string::{BinaryString, Bounds}, comparison::MinimizingOperator, evolutionary_strategy::OneToFiveStrategy, fitness::{one_max::OneMax, real::Linear, rosenbrock::Rosenbrock, sphere::Sphere, BinaryFitnessWrapper}, local_search::{local_search_first_improving, local_search_first_improving_evolving, plot_fitness_evolution}, perturbation::{BinaryStringBitPerturbation, BoundedPerturbation, BoundedPerturbationStrategy, PatternPerturbation, RandomDistributionPerturbation}, terminating::{AndTerminatingConditions, EqualTerminatingCondition, NoBetterForCyclesTerminatingCondition}};
+ use crate::{binary_string::{BinaryString, Bounds}, comparison::MinimizingOperator, evolutionary_strategy::{IdentityStrategy, OneToFiveStrategy}, fitness::{one_max::OneMax, real::Linear, rosenbrock::Rosenbrock, sphere::Sphere, BinaryFitnessWrapper}, local_search::{local_search_first_improving, local_search_first_improving_evolving, plot_fitness_evolution}, perturbation::{BinaryStringBitPerturbation, BoundedPerturbation, BoundedPerturbationStrategy, PatternPerturbation, RandomDistributionPerturbation}, terminating::{AndTerminatingConditions, CloserThanTerminatingCondition, EqualTerminatingCondition, NoBetterForCyclesTerminatingCondition}};
#[test]
- fn test_local_search_sphere() {
+ fn test_local_search_sphere_binary() {
let optimum = BinaryString::new(vec![0, 0, 1, 0, 0,
0, 0, 1, 0, 0]);
let min = SVector::<f64, 2>::from_element(0.0);
@@ 315,7 315,40 @@ pub mod tests {
optimum
);
- plot_fitness_evolution("test_results/sphere.png", result.stats.to_real(&min, &max).unwrap()).unwrap();
+ plot_fitness_evolution("test_results/sphere_binary.png", result.stats.to_real(&min, &max).unwrap()).unwrap();
+ }
+
+ #[test]
+ fn test_local_search_sphere() {
+ let optimum = SVector::<f64, 2>::repeat(4.0);
+ let sphere = Sphere::new(optimum);
+
+ let result = local_search_first_improving_evolving(
+ &sphere,
+ &mut
+ AndTerminatingConditions::new(
+ vec![
+ &mut CloserThanTerminatingCondition::new_remembered(optimum.clone(), 0.1),
+ &mut NoBetterForCyclesTerminatingCondition::new(100)
+ ]
+ ),
+ &mut RandomDistributionPerturbation::normal(0.3).unwrap(),
+ &MinimizingOperator::new(),
+ &mut IdentityStrategy,
+ &SVector::<f64, 2>::repeat(-5.0),
+ ).unwrap();
+
+ println!("{:?}", result);
+
+ assert!(
+ result.best_candidate.fit <= 0.1
+ );
+
+ assert!(
+ (result.best_candidate.pos - optimum).magnitude() <= 0.1
+ );
+
+ plot_fitness_evolution("test_results/sphere.png", result.stats).unwrap();
}
#[test]