~ruther/ctu-fee-eoa

296be2ccb34ce7187b3b1a202f65467595fc5e03 — Rutherther 2 months ago abae711
feat: add test for local search with PatternPerturbation
1 files changed, 40 insertions(+), 1 deletions(-)

M env/src/local_search/mod.rs
M env/src/local_search/mod.rs => env/src/local_search/mod.rs +40 -1
@@ 81,7 81,7 @@ where
pub mod tests {
    use nalgebra::SVector;

    use crate::{binary_string::{BinaryString, Bounds}, comparison::MinimizingOperator, fitness::{one_max::OneMax, real::Linear, rosenbrock::Rosenbrock, sphere::Sphere, BinaryFitnessWrapper}, local_search::local_search_first_improving, perturbation::{BinaryStringBitPerturbation, BoundedPerturbation, BoundedPerturbationStrategy, RandomDistributionPerturbation}, terminating::{AndTerminatingConditions, EqualTerminatingCondition, NoBetterForCyclesTerminatingCondition}};
    use crate::{binary_string::{BinaryString, Bounds}, comparison::MinimizingOperator, fitness::{one_max::OneMax, real::Linear, rosenbrock::Rosenbrock, sphere::Sphere, BinaryFitnessWrapper}, local_search::local_search_first_improving, perturbation::{BinaryStringBitPerturbation, BoundedPerturbation, BoundedPerturbationStrategy, PatternPerturbation, RandomDistributionPerturbation}, terminating::{AndTerminatingConditions, EqualTerminatingCondition, NoBetterForCyclesTerminatingCondition}};

    #[test]
    fn test_local_search_sphere() {


@@ 256,4 256,43 @@ pub mod tests {
            optimum
        );
    }

    #[test]
    fn test_local_search_linear_pattern() {
        let optimum = SVector::<f64, 2>::from_vec(vec![-10.0, 10.0]);
        let max = SVector::<f64, 2>::from_vec(vec![10.0, 10.0]);
        let min = -SVector::<f64, 2>::from_vec(vec![10.0, 10.0]);

        let linear = Linear::new(7.0, SVector::<f64, 2>::from_vec(vec![0.2, -0.5]));

        let result = local_search_first_improving(
            &linear,
            &mut
                AndTerminatingConditions::new(
                    vec![
                        &mut EqualTerminatingCondition::new_remembered(optimum.clone()),
                        &mut NoBetterForCyclesTerminatingCondition::new(100)
                    ]
                ),
            &mut BoundedPerturbation::new(
                PatternPerturbation::new(0.5),
                min,
                max,
                BoundedPerturbationStrategy::Retry(10)),
            &MinimizingOperator::new(),
            &SVector::<f64, 2>::zeros(),
        ).unwrap();

        println!("{:?}", result);

        assert_eq!(
            result.best_candidate.fit,
            -0.0
        );

        assert_eq!(
            result.best_candidate.pos,
            optimum
        );
    }
}