from dataclasses import dataclass, field
import numpy as np
[docs]
@dataclass
class EvolutionConfig:
"""Core genetic algorithm controls."""
population_size: int = 50
generations: int = 80
crossover_probability: object = 0.8
mutation_probability: object = 0.1
tournament_size: int = 3
elitism: bool = True
keep_top_k: int = 1
criteria: str = "max"
algorithm: str = "eaMuPlusLambda"
[docs]
@dataclass
class PopulationConfig:
"""Initial population strategy."""
initializer: str = "smart"
warm_start_configs: list[dict] = field(default_factory=list)
[docs]
@dataclass
class RuntimeConfig:
"""Execution, parallelism, and result-collection controls."""
n_jobs: int | None = None
pre_dispatch: str | int | None = "2*n_jobs"
error_score: float | str = np.nan
return_train_score: bool = False
use_cache: bool = True
parallel_backend: str = "auto"
verbose: bool = True
[docs]
@dataclass
class OptimizationConfig:
"""Optional quality controls used around the main GA loop."""
local_search: bool = False
local_search_top_k: int = 1
local_search_steps: int = 1
local_search_radius: float = 0.1
diversity_control: bool = True
diversity_threshold: float = 0.25
diversity_stagnation_generations: int = 5
diversity_mutation_boost: float = 2.0
random_immigrants_fraction: float = 0.1
adaptive_selection: bool = False
selection_pressure_min: int = 2
selection_pressure_max: int | None = None
offspring_diversity_retries: int = 0
fitness_sharing: bool = False
sharing_radius: float = 0.2
sharing_alpha: float = 1.0
final_selection: bool = False
final_selection_top_k: int = 3
final_selection_cv: object = None