From a52b682c3a79d09cd570af009871e5359d8a3e28 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sun, 5 Oct 2025 11:51:58 +0200 Subject: [PATCH] tests: add rosenbrock test --- env/src/local_search/mod.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/env/src/local_search/mod.rs b/env/src/local_search/mod.rs index 1ab30c70c85f59ecc0089df56a298790053b3729..631e8fda1fed1ff355382a8a589c7820546a63c8 100644 --- a/env/src/local_search/mod.rs +++ b/env/src/local_search/mod.rs @@ -4,6 +4,8 @@ use crate::binary_string::Bounds; #[cfg(test)] use crate::fitness::one_max::OneMax; #[cfg(test)] +use crate::fitness::rosenbrock::Rosenbrock; +#[cfg(test)] use crate::fitness::sphere::Sphere; #[cfg(test)] use crate::terminating::{AndTerminatingConditions, EqualTerminatingCondition, NoBetterForCyclesTerminatingCondition}; @@ -158,3 +160,38 @@ fn test_local_search_one_max() { optimum ); } + +#[test] +fn test_local_search_rosenbrock() { + let rosenbrock = Rosenbrock::new(); + let optimum = BinaryString::new(vec![1, 0, 0, 0, 1, 1, 0, 0, 0, 1]); + + let bounds = vec![Bounds::new(-16.0, 15.0), Bounds::new(-16.0, 15.0)]; + let rosenbrock_wrapped = BinaryFitnessWrapper::new(rosenbrock, bounds); + + let result = local_search_first_improving( + &rosenbrock_wrapped, + &mut + AndTerminatingConditions::new( + vec![ + &mut EqualTerminatingCondition::new_remembered(optimum.clone()), + &mut NoBetterForCyclesTerminatingCondition::new(100) + ] + ), + &mut BinaryStringBitPerturbation::new(0.3), + &MinimizingOperator::new(), + &BinaryString::new(vec![0; 10]), + ).unwrap(); + + println!("{:?}", result); + + assert_eq!( + result.best_candidate.fit, + 0.0 + ); + + assert_eq!( + result.best_candidate.pos, + optimum + ); +}