~ruther/ctu-fee-eoa

8ac232c0d2daecb1c39475e86b0f3c007bbf8fae — Rutherther a month ago f39d246
chore: fix warnings
M codes/eoa_lib/src/crossover.rs => codes/eoa_lib/src/crossover.rs +0 -1
@@ 2,7 2,6 @@ use std::marker::PhantomData;

use nalgebra::{allocator::Allocator, DefaultAllocator, Dim, OVector, Scalar, U1};
use rand::{seq::IteratorRandom, Rng, RngCore};
use rand_distr::Uniform;

use crate::{binary_string::BinaryString, pairing::ParentPairing, population::{EvaluatedPopulation, Population}};


M codes/eoa_lib/src/evolutionary_strategy.rs => codes/eoa_lib/src/evolutionary_strategy.rs +1 -1
@@ 3,7 3,7 @@ use std::{convert::Infallible, error::Error};
use nalgebra::SVector;
use rand_distr::{Normal, NormalError};

use crate::{local_search::LocalSearchStats, perturbation::{apply_to_perturbations, BoundedPerturbation, PerturbationOperator, RandomDistributionPerturbation}};
use crate::{local_search::LocalSearchStats, perturbation::{apply_to_perturbations, PerturbationOperator, RandomDistributionPerturbation}};

pub trait EvolutionaryStrategy<TOut, TPerturbation: PerturbationOperator> {
    type Err: Error + 'static;

M codes/eoa_lib/src/pairing.rs => codes/eoa_lib/src/pairing.rs +1 -1
@@ 1,6 1,6 @@
use std::marker::PhantomData;

use nalgebra::{Const, OVector, SVector};
use nalgebra::{Const, OVector};

use crate::population::EvaluatedPopulation;


M codes/eoa_lib/src/perturbation/mod.rs => codes/eoa_lib/src/perturbation/mod.rs +1 -1
@@ 1,4 1,4 @@
use std::{any::Any, borrow::{Borrow, BorrowMut}, marker::PhantomData};
use std::{any::Any, marker::PhantomData};

use nalgebra::{allocator::Allocator, DefaultAllocator, Dim, SVector};
use rand::{distr::Distribution, Rng, RngCore, prelude::IteratorRandom};

M codes/eoa_lib/src/replacement.rs => codes/eoa_lib/src/replacement.rs +2 -4
@@ 1,7 1,7 @@
use rand::{seq::IteratorRandom, RngCore};
use std::fmt::Debug;

use crate::{comparison::BetterThanOperator, fitness::FitnessFunction, population::{EvaluatedPopulation, EvaluatedChromosome}, selection::{Selection, TournamentSelection}};
use crate::{comparison::BetterThanOperator, population::EvaluatedPopulation, selection::{Selection, TournamentSelection}};

fn extract_by_indices<T>(mut x: Vec<T>, mut idxs: Vec<usize>) -> Vec<T> {
    idxs.sort_unstable_by(|a, b| b.cmp(a));


@@ 113,14 113,12 @@ impl<TInput, TResult> Replacement<TInput, TResult> for RandomReplacement {
}

pub struct TournamentReplacement {
    selection: TournamentSelection,
    evaluation_pool: Vec<f64>
    selection: TournamentSelection
}

impl TournamentReplacement {
    pub fn new(k: usize, p: f64) -> Self {
        TournamentReplacement {
            evaluation_pool: vec![],
            selection: TournamentSelection::new(
                k,
                p,

M codes/eoa_lib/src/selection.rs => codes/eoa_lib/src/selection.rs +2 -2
@@ 1,6 1,6 @@
use nalgebra::{Dyn, OVector, Scalar, U1};
use nalgebra::Scalar;
use rand::{seq::IteratorRandom, Rng, RngCore};
use rand_distr::uniform::{SampleRange, SampleUniform};
use rand_distr::uniform::SampleUniform;
use std::{cmp::Ordering, fmt::Debug, ops::{AddAssign, Sub}};

use crate::{comparison::BetterThanOperator, population::EvaluatedPopulation};

M codes/tsp_hw01/src/crossovers.rs => codes/tsp_hw01/src/crossovers.rs +1 -1
@@ 227,7 227,7 @@ where
        &self,
        parents: &eoa_lib::population::EvaluatedPopulation<Self::Chromosome, Self::Out>,
        pairs: impl Iterator<Item = eoa_lib::pairing::ParentPairing<2>>,
        rng: &mut dyn RngCore
        _: &mut dyn RngCore
    ) -> Population<Self::Chromosome> {
        let mut offsprings = vec![];


M codes/tsp_hw01/src/initializers.rs => codes/tsp_hw01/src/initializers.rs +5 -7
@@ 1,5 1,5 @@
use std::{cmp::Ordering, marker::PhantomData};
use nalgebra::{allocator::Allocator, Const, DefaultAllocator, Dim, OVector, U1, U2};
use nalgebra::{allocator::Allocator, DefaultAllocator, Dim, OVector, U1, U2};
use rand::{prelude::SliceRandom, seq::IteratorRandom, Rng, RngCore};
use eoa_lib::initializer::Initializer;
use crate::{graph::{Graph, minimal_spanning_tree_kruskal, GenericGraph}, tsp::{NodePermutation, TSPCity, TSPEdge, TSPInstance}};


@@ 37,22 37,21 @@ where
    }
}

pub struct NearestNeighborInitializer<'a, D: Dim>
pub struct NearestNeighborInitializer<D: Dim>
where
    DefaultAllocator: nalgebra::allocator::Allocator<D>,
    DefaultAllocator: nalgebra::allocator::Allocator<D, D>
{
    instance: &'a TSPInstance<D>,
    neighbors_order: Vec<Vec<usize>>,
    _phantom: PhantomData<D>,
}

impl<'a, D: Dim> NearestNeighborInitializer<'a, D>
impl<D: Dim> NearestNeighborInitializer<D>
where
    DefaultAllocator: nalgebra::allocator::Allocator<D>,
    DefaultAllocator: nalgebra::allocator::Allocator<D, D>
{
    pub fn new(instance: &'a TSPInstance<D>) -> Self {
    pub fn new(instance: &TSPInstance<D>) -> Self {
        let mut neighbors_order = vec![
            (0..instance.cities.len()).collect::<Vec<_>>();
            instance.cities.len()


@@ 69,7 68,6 @@ where

        Self {
            neighbors_order,
            instance,
            _phantom: PhantomData
        }
    }


@@ 118,7 116,7 @@ where
    }
}

impl<'a, D: Dim> Initializer<D, NodePermutation<D>> for NearestNeighborInitializer<'a, D>
impl<D: Dim> Initializer<D, NodePermutation<D>> for NearestNeighborInitializer<D>
where
    DefaultAllocator: nalgebra::allocator::Allocator<D>,
    DefaultAllocator: nalgebra::allocator::Allocator<D, D>

M codes/tsp_hw01/src/main.rs => codes/tsp_hw01/src/main.rs +3 -3
@@ 8,12 8,12 @@ pub mod graph;

use tsp::{NodePermutation, TSPInstance};
use initializers::{MinimumSpanningTreeInitializer, NearestNeighborInitializer, TSPRandomInitializer};
use crossovers::{CycleCrossover, EdgeRecombinationCrossover, NoCrossover, PartiallyMappedCrossover};
use perturbations::{MovePerturbation, Random2OptPerturbation, ReverseSubsequencePerturbation, SwapPerturbation};
use crossovers::{CycleCrossover, EdgeRecombinationCrossover, PartiallyMappedCrossover};
use perturbations::{MovePerturbation, ReverseSubsequencePerturbation, SwapPerturbation};
use binary_string_representation::TSPBinaryStringWrapper;
use nalgebra::{Dim, Dyn};
use eoa_lib::{
    binary_string::BinaryString, comparison::MinimizingOperator, crossover::BinaryNPointCrossover, evolution::{evolution_algorithm, EvolutionStats}, evolutionary_strategy::IdentityStrategy, initializer::{Initializer, RandomInitializer}, local_search::{local_search_first_improving, LocalSearchStats}, pairing::AdjacentPairing, perturbation::{apply_to_perturbations, BinaryStringBitPerturbation, BinaryStringFlipNPerturbation, BinaryStringSingleBitPerturbation, CombinedPerturbation, IdentityPerturbation, MutationPerturbation, OneOfPerturbation, PerturbationOperator}, random_search::random_search, replacement::{BestReplacement, TournamentReplacement}, selection::{BestSelection, RouletteWheelSelection, TournamentSelection}, terminating::MaximumCyclesTerminatingCondition
    binary_string::BinaryString, comparison::MinimizingOperator, crossover::BinaryNPointCrossover, evolution::{evolution_algorithm, EvolutionStats}, evolutionary_strategy::IdentityStrategy, initializer::{Initializer, RandomInitializer}, local_search::{local_search_first_improving, LocalSearchStats}, pairing::AdjacentPairing, perturbation::{apply_to_perturbations, BinaryStringBitPerturbation, BinaryStringFlipNPerturbation, BinaryStringSingleBitPerturbation, CombinedPerturbation, IdentityPerturbation, MutationPerturbation, OneOfPerturbation}, random_search::random_search, replacement::{BestReplacement, TournamentReplacement}, selection::{BestSelection, RouletteWheelSelection}, terminating::MaximumCyclesTerminatingCondition
};
use rand::rng;
use std::env;

M codes/tsp_hw01/src/tsp.rs => codes/tsp_hw01/src/tsp.rs +1 -1
@@ 5,7 5,7 @@ use itertools::Itertools;
use nalgebra::{allocator::Allocator, distance, Const, DefaultAllocator, Dim, Dyn, OMatrix, OVector, Point};
use plotters::prelude::*;

use crate::graph::{minimal_spanning_tree_kruskal, Edge, GenericGraph, Graph, WeightedEdge};
use crate::graph::{Edge, GenericGraph, WeightedEdge};

#[derive(PartialEq, Clone, Debug)]
pub struct TSPCity {