pub mod crossover;
pub mod extension;
pub mod local_search;
pub mod mutation;
pub mod selection;
pub mod survivor;
pub use local_search::{
factory, factory_with_config, HillClimbingConfig, LocalSearch, LocalSearchApplicationStrategy,
LocalSearchMode,
};
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Selection {
Random,
RouletteWheel,
StochasticUniversalSampling,
Tournament,
Rank,
Boltzmann,
Truncation,
Clearing,
Lexicase,
EpsilonLexicase,
}
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum AlignmentStrategy {
Trim,
Pad,
}
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Crossover {
Cycle,
MultiPoint,
Uniform,
SinglePoint,
Order,
Pmx,
Sbx,
BlendAlpha,
Arithmetic,
Clone,
Rejuvenate,
EdgeRecombination,
VariableLength(AlignmentStrategy),
MultiGroupPmx,
MultiGroupOx,
Undx { num_parents: usize },
Spx { num_parents: usize },
Pcx { num_parents: usize },
}
#[derive(Debug, Clone, Copy, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CreepParams {
#[cfg_attr(feature = "serde", serde(default))]
pub step: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct GaussianParams {
#[cfg_attr(feature = "serde", serde(default))]
pub sigma: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PolynomialParams {
#[cfg_attr(feature = "serde", serde(default))]
pub eta: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct NonUniformParams {
#[cfg_attr(feature = "serde", serde(default))]
pub b: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DifferentialParams {
#[cfg_attr(feature = "serde", serde(default))]
pub f: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CauchyParams {
#[cfg_attr(feature = "serde", serde(default))]
pub scale: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct LevyFlightParams {
#[cfg_attr(feature = "serde", serde(default))]
pub alpha: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SelfAdaptiveGaussianParams {
#[cfg_attr(feature = "serde", serde(default))]
pub tau: Option<f64>,
#[cfg_attr(feature = "serde", serde(default))]
pub tau_prime: Option<f64>,
#[cfg_attr(feature = "serde", serde(default))]
pub sigma_min: Option<f64>,
#[cfg_attr(feature = "serde", serde(default))]
pub sigma_max: Option<f64>,
}
#[derive(Clone, Copy, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Mutation {
Swap,
Inversion,
Scramble,
Value,
BitFlip,
Creep(CreepParams),
Gaussian(GaussianParams),
Polynomial(PolynomialParams),
NonUniform(NonUniformParams),
PermutationInsert,
Insertion,
Deletion,
ListValue,
Differential(DifferentialParams),
Cauchy(CauchyParams),
LevyFlight(LevyFlightParams),
Uniform,
SelfAdaptiveGaussian(SelfAdaptiveGaussianParams),
}
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Survivor {
Fitness,
Age,
MuPlusLambda,
MuCommaLambda,
DeterministicCrowding,
}
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Extension {
Noop,
MassExtinction,
MassGenesis,
MassDegeneration,
MassDeduplication,
}
impl Extension {
pub fn as_str(&self) -> &'static str {
match self {
Extension::Noop => "Noop",
Extension::MassExtinction => "MassExtinction",
Extension::MassGenesis => "MassGenesis",
Extension::MassDegeneration => "MassDegeneration",
Extension::MassDeduplication => "MassDeduplication",
}
}
}