from dataclasses import dataclass, field
from typing import Optional, Callable
from detpy.DETAlgs.population_reduction.linear_population_size_reduction import LinearPopulationSizeReduction
from detpy.DETAlgs.population_reduction.population_size_reduction_strategy import PopulationSizeReductionStrategy
from detpy.models.enums.basevectorschema import BaseVectorSchema
from detpy.models.enums.crossingtype import CrossingType
from detpy.models.enums.derivative_method import DerivativeMethod
from detpy.models.fitness_function import FitnessFunctionBase
from detpy.models.enums.boundary_constrain import BoundaryFixing
from detpy.models.enums.optimization import OptimizationType
from detpy.models.stop_condition.never_stop_condition import NeverStopCondition
from detpy.models.stop_condition.stop_condition import StopCondition
@dataclass
class BaseData:
population_size: int = 100
max_nfe: int = 100_000
dimension: int = 10
additional_stop_criteria: StopCondition = NeverStopCondition()
lb: list = field(default_factory=lambda: [-100, -100, -100, -100, -100, -100, -100, -100, -100, -100])
ub: list = field(default_factory=lambda: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100])
optimization_type: OptimizationType = OptimizationType.MINIMIZATION
boundary_constraints_fun: BoundaryFixing = BoundaryFixing.RANDOM
function: FitnessFunctionBase = None
log_population: bool = False
parallel_processing: Optional[list] = None
show_plots: bool = True
[docs]
@dataclass
class DEData(BaseData):
mutation_factor: float = 0.5
crossover_rate: float = 0.5
crossing_type: CrossingType = CrossingType.BINOMIAL
y: int = 1
base_vector_schema: BaseVectorSchema = BaseVectorSchema.CURRENT
[docs]
@dataclass
class COMDEData(BaseData):
mutation_factor: float = 0.1
crossover_rate: float = 0.1
crossing_type: CrossingType = CrossingType.BINOMIAL
[docs]
@dataclass
class DERLData(BaseData):
mutation_factor: float = 0.1
crossover_rate: float = 0.1
crossing_type: CrossingType = CrossingType.BINOMIAL
[docs]
@dataclass
class NMDEData(BaseData):
delta_f: float = 0.1
delta_cr: float = 0.1
sp: int = 10
[docs]
@dataclass
class SADEData(BaseData):
prob_f: float = 0.1
prob_cr: float = 0.1
[docs]
@dataclass
class EMDEData(BaseData):
crossover_rate: float = 0.1
crossing_type: CrossingType = CrossingType.BINOMIAL
[docs]
@dataclass
class IDEData(BaseData):
base_vector_schema: BaseVectorSchema = BaseVectorSchema.CURRENT
y: int = 1
[docs]
@dataclass
class DELBData(BaseData):
crossover_rate: float = 0.1
w_factor: float = 0.1 # control frequency of local exploration around trial and best vectors
crossing_type: CrossingType = CrossingType.BINOMIAL
[docs]
@dataclass
class OppBasedData(BaseData):
mutation_factor: float = 0.1
crossover_rate: float = 0.1
crossing_type: CrossingType = CrossingType.BINOMIAL
y: int = 1
base_vector_schema: BaseVectorSchema = BaseVectorSchema.CURRENT
max_nfc: float = 0.1
jumping_rate: float = 0.1
[docs]
@dataclass
class DEGLData(BaseData):
mutation_factor: float = 0.1
crossover_rate: float = 0.1
crossing_type: CrossingType = CrossingType.BINOMIAL
radius: int = 10 # neighborhood size, 2k + 1 <= NP, at least k=2
weight: float = 0.1 # controls the balance between the exploration and exploitation
[docs]
@dataclass
class JADEData(BaseData):
archive_size: int = 10
mutation_factor_mean: float = 0.1
mutation_factor_std: float = 0.1
crossover_rate_mean: float = 0.1
crossover_rate_std: float = 0.1
crossover_rate_low: float = 0.1
crossover_rate_high: float = 0.1
c: float = 0.1 # describes the rate of parameter adaptation
p: float = 0.1 # describes the greediness of the mutation strategy
[docs]
@dataclass
class AADEData(BaseData):
mutation_factor: float = 0.1
crossover_rate: float = 0.1
[docs]
@dataclass
class EIDEData(BaseData):
crossover_rate_min: float = 0.1
crossover_rate_max: float = 0.1
crossing_type: CrossingType = CrossingType.BINOMIAL
y: int = 1
base_vector_schema: BaseVectorSchema = BaseVectorSchema.CURRENT
[docs]
@dataclass
class MGDEData(BaseData):
crossover_rate: float = 0.1
crossing_type: CrossingType = CrossingType.BINOMIAL
mutation_factor_f: float = 0.1
mutation_factor_k: float = 0.1
threshold: float = 0.1
mu: float = 0.1
[docs]
@dataclass
class FiADEData(BaseData):
mutation_factor: float = 0.5
crossover_rate: float = 0.5
adaptive: bool = True
[docs]
@dataclass
class ImprovedDEData(BaseData):
mutation_factor: float = 0.1
crossover_rate: float = 0.5
[docs]
@dataclass
class ShadeData(BaseData):
memory_size: int = 5
[docs]
@dataclass
class Shade_1_1_Data(BaseData):
memory_size: int = 5
best_member_percentage: float = 0.2
[docs]
@dataclass
class LSHADERSPData(BaseData):
scaling_factor_for_rank_selection: float = 3.5
memory_size: int = 5
minimum_population_size: int = 20
population_reduction_strategy: PopulationSizeReductionStrategy = LinearPopulationSizeReduction()
[docs]
@dataclass
class LShadeData(BaseData):
population_reduction_strategy: PopulationSizeReductionStrategy = LinearPopulationSizeReduction()
minimum_population_size: int = 5
memory_size: int = 5
best_member_percentage: float = 0.2
[docs]
@dataclass
class SPSLShadeEIGDATA(BaseData):
minimum_population_size: int = 5
population_reduction_strategy: PopulationSizeReductionStrategy = LinearPopulationSizeReduction()
memory_size: int = 20
q: int = 64
f_init: float = 0.5
cr_init: float = 0.3
er_init: float = 1.0
cr_min: float = 0.6
cr_max: float = 0.95
learning_rate_init: float = 0.1
p_best_fraction: float = 0.1
w_ext: float = 1.90
w_er: float = 0.6807
w_cr: float = 0.2079
w_f: float = 0.3530
[docs]
@dataclass
class ALSHADEData(BaseData):
minimum_population_size: int = 4
memory_size: int = 6
archive_size: int = 100
elite_factor: float = 0.5
init_probability_mutation_strategy: float = 0.5
population_size_reduction_strategy: PopulationSizeReductionStrategy = LinearPopulationSizeReduction()
[docs]
@dataclass
class DETCRData(BaseData):
triangular_distribution_for_crossover_rate = [0.2, 0.5, 1.0]
triangular_distribution_for_mutation_factory = [0.3, 0.4, 0.5]
number_of_success_crossover_rate: int = 15
lineal_recombination_factor: float = 0.75
gamma_var: int = 3
[docs]
@dataclass
class LShadeEpsinData(BaseData):
minimum_population_size: int = 5
memory_size: int = 5
best_member_percentage: float = 0.2
f_sin_freq: float = 0.1 # Base frequency of the sinusoidal oscillation controlling the scaling factor F during the early exploration phase.
population_reduction_strategy: PopulationSizeReductionStrategy = LinearPopulationSizeReduction()
[docs]
@dataclass
class EPSDEData(BaseData):
mutation_factor: float = 0.7
crossover_rate: float = 0.9
epsilon_level: int = 0
penalty_power: int = 2
tolerance_h: float = 1e-3
g_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
h_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
[docs]
@dataclass
class EPSDEAGData(BaseData):
init_mutation_factor: float = 0.5
init_crossover_rate: float = 0.9
theta: float = 0.9
tolerance_h: float = 1e-3
penalty_power: int = 2
control_generations: int = 150
archive_size: int = 300
gradient_base_mutation_rate: float = 0.2
number_of_repeating_mutation: int = 3
number_of_repeating_de_operations: int = 2
gradient_mutation_interval: int = 5
derivative_method = DerivativeMethod.NUMERIC
g_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
h_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
[docs]
@dataclass
class EPSDEGData(BaseData):
mutation_factor: float = 0.5
crossover_rate: float = 0.9
gradient_base_mutation_rate: float = 0.2
tolerance_h: float = 1e-3
theta: int = None
penalty_power: int = 2
control_generations: int = 150
gradient_mutation_interval: int = 5
derivative_method = DerivativeMethod.NUMERIC
g_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
h_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
[docs]
@dataclass
class EPSADEData(BaseData):
init_mutation_factor: float = 0.7
init_crossover_rate: float = 0.9
mutation_factor_perturbation_width: float = 0.5
crossover_rate_perturbation_width: float = 0.5
weight_of_update: float = 0.1
penalty_power: int = 2
theta: int = None
tolerance_h: float = 1e-3
epsilon_scaling_factor: int = 5
control_generations: int = 100
truncation_mechanism_factory: float = 0.9
g_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
h_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
[docs]
@dataclass
class EPSRDEData(BaseData):
crossing_type: CrossingType = CrossingType.EXPOTENTIAL
min_mutation_factor: float = 0.6
max_mutation_factor: float = 0.95
min_crossover_rate: float = 0.85
max_crossover_rate: float = 0.95
penalty_power: int = 2
control_generations: int = 150
epsilon_scaling_factor: int = 5
theta: int = None
tolerance_h: float = 1e-3
g_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
h_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
[docs]
@dataclass
class EPSDEwDCData(BaseData):
mutation_factor: float = 0.7
crossover_rate: float = 0.9
penalty_power: int = 2
theta = None
tolerance_h: float = 1e-3
eta = 2
control_generations: int = 150
g_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)
h_funcs: list[Callable[[list[float]], float]] = field(default_factory=list)