@@ 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
+ );
+}