~ruther/ctu-fee-eoa

d0b6ff6a1b9619241d4c24595f3b3e4383e4ffc6 — Rutherther a month ago eac17bc
tests: Add test for sphere real representation
1 files changed, 36 insertions(+), 3 deletions(-)

M env/src/local_search/mod.rs
M env/src/local_search/mod.rs => env/src/local_search/mod.rs +36 -3
@@ 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]