~ruther/ctu-fee-eoa

a52b682c3a79d09cd570af009871e5359d8a3e28 — Rutherther 2 months ago 13e5d2f
tests: add rosenbrock test
1 files changed, 37 insertions(+), 0 deletions(-)

M env/src/local_search/mod.rs
M env/src/local_search/mod.rs => env/src/local_search/mod.rs +37 -0
@@ 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
    );
}