use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct MLOptimizationConfig {
pub enable_ml_optimization: bool,
pub ml_models: Vec<MLModelType>,
pub training_config: MLTrainingConfig,
pub feature_engineering: FeatureEngineeringConfig,
pub online_learning: OnlineLearningConfig,
pub transfer_learning: TransferLearningConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum MLModelType {
NeuralNetwork,
RandomForest,
SupportVectorMachine,
GradientBoosting,
BayesianOptimization,
ReinforcementLearning,
GaussianProcess,
EnsembleModel,
}
#[derive(Debug, Clone, Default)]
pub struct MLTrainingConfig {
pub training_data: TrainingDataConfig,
pub hyperparameters: ModelHyperparameters,
pub optimization: TrainingOptimizationConfig,
pub regularization: RegularizationConfig,
pub early_stopping: EarlyStoppingConfig,
pub cross_validation: CrossValidationConfig,
}
#[derive(Debug, Clone)]
pub struct TrainingDataConfig {
pub min_training_samples: usize,
pub data_collection_strategy: DataCollectionStrategy,
pub preprocessing: DataPreprocessingConfig,
pub augmentation: DataAugmentationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DataCollectionStrategy {
Passive,
Active,
Adaptive,
Balanced,
Targeted,
}
#[derive(Debug, Clone)]
pub struct DataPreprocessingConfig {
pub normalization: NormalizationMethod,
pub outlier_handling: OutlierHandling,
pub missing_value_strategy: MissingValueStrategy,
pub validation_rules: Vec<DataValidationRule>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum NormalizationMethod {
MinMax,
ZScore,
Robust,
Quantile,
None,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OutlierHandling {
Remove,
Cap,
Transform,
Ignore,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum MissingValueStrategy {
Remove,
Impute,
Interpolate,
Forward,
Backward,
}
#[derive(Debug, Clone)]
pub struct DataValidationRule {
pub name: String,
pub condition: ValidationCondition,
pub failure_action: ValidationFailureAction,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ValidationCondition {
RangeCheck(f64, f64),
NotNull,
UniqueValues,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ValidationFailureAction {
Reject,
Warn,
Transform,
Ignore,
}
#[derive(Debug, Clone)]
pub struct DataAugmentationConfig {
pub enable_augmentation: bool,
pub techniques: Vec<AugmentationTechnique>,
pub augmentation_ratio: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AugmentationTechnique {
NoiseInjection,
Rotation,
Scaling,
Permutation,
Interpolation,
Synthetic,
}
#[derive(Debug, Clone)]
pub struct ModelHyperparameters {
pub learning_rate: f64,
pub batch_size: usize,
pub epochs: usize,
pub model_specific: HashMap<String, f64>,
pub optimization: HyperparameterOptimization,
}
#[derive(Debug, Clone)]
pub struct HyperparameterOptimization {
pub enable_optimization: bool,
pub strategy: HyperparameterStrategy,
pub search_space: SearchSpaceConfig,
pub optimization_budget: OptimizationBudget,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum HyperparameterStrategy {
GridSearch,
RandomSearch,
BayesianOptimization,
GeneticAlgorithm,
HalvingSearch,
}
#[derive(Debug, Clone, Default)]
pub struct SearchSpaceConfig {
pub parameter_ranges: HashMap<String, ParameterRange>,
pub categorical_parameters: HashMap<String, Vec<String>>,
pub constraints: Vec<ParameterConstraint>,
}
#[derive(Debug, Clone)]
pub struct ParameterRange {
pub min: f64,
pub max: f64,
pub step: Option<f64>,
pub distribution: ParameterDistribution,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ParameterDistribution {
Uniform,
LogUniform,
Normal,
LogNormal,
}
#[derive(Debug, Clone)]
pub struct ParameterConstraint {
pub name: String,
pub expression: String,
pub constraint_type: ConstraintType,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ConstraintType {
Equality,
Inequality,
Conditional,
}
#[derive(Debug, Clone)]
pub struct OptimizationBudget {
pub max_evaluations: usize,
pub max_time: Duration,
pub early_stopping: EarlyStoppingCriteria,
}
#[derive(Debug, Clone)]
pub struct EarlyStoppingCriteria {
pub patience: usize,
pub min_improvement: f64,
pub improvement_metric: String,
}
#[derive(Debug, Clone)]
pub struct TrainingOptimizationConfig {
pub optimizer: OptimizerType,
pub lr_scheduling: LearningRateScheduling,
pub gradient_clipping: GradientClippingConfig,
pub loss_function: LossFunctionConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OptimizerType {
SGD,
Adam,
RMSprop,
AdaGrad,
LBFGS,
}
#[derive(Debug, Clone)]
pub struct LearningRateScheduling {
pub enable_scheduling: bool,
pub strategy: LRSchedulingStrategy,
pub parameters: HashMap<String, f64>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LRSchedulingStrategy {
StepDecay,
ExponentialDecay,
CosineAnnealing,
ReduceOnPlateau,
Cyclical,
}
#[derive(Debug, Clone)]
pub struct GradientClippingConfig {
pub enable_clipping: bool,
pub method: ClippingMethod,
pub threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ClippingMethod {
Norm,
Value,
Global,
}
#[derive(Debug, Clone)]
pub struct LossFunctionConfig {
pub primary_loss: LossFunction,
pub auxiliary_losses: Vec<AuxiliaryLoss>,
pub weighting_scheme: LossWeightingScheme,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LossFunction {
MeanSquaredError,
MeanAbsoluteError,
Huber,
CrossEntropy,
FocalLoss,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct AuxiliaryLoss {
pub loss_function: LossFunction,
pub weight: f64,
pub scope: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LossWeightingScheme {
Static,
Dynamic,
Adaptive,
Uncertainty,
}
#[derive(Debug, Clone)]
pub struct RegularizationConfig {
pub l1_strength: f64,
pub l2_strength: f64,
pub dropout_rate: f64,
pub batch_normalization: bool,
pub additional_techniques: Vec<RegularizationTechnique>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RegularizationTechnique {
Dropout,
BatchNorm,
LayerNorm,
WeightDecay,
EarlyStop,
DataAugmentation,
}
#[derive(Debug, Clone)]
pub struct EarlyStoppingConfig {
pub enable_early_stopping: bool,
pub patience: usize,
pub min_delta: f64,
pub monitor_metric: String,
pub improvement_direction: ImprovementDirection,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ImprovementDirection {
Maximize,
Minimize,
}
#[derive(Debug, Clone)]
pub struct CrossValidationConfig {
pub enable_cv: bool,
pub folds: usize,
pub strategy: CVStrategy,
pub stratification: StratificationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CVStrategy {
KFold,
StratifiedKFold,
TimeSeriesSplit,
GroupKFold,
LeaveOneOut,
}
#[derive(Debug, Clone)]
pub struct StratificationConfig {
pub enable_stratification: bool,
pub stratification_variable: String,
pub balance_strategy: BalanceStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BalanceStrategy {
None,
Oversample,
Undersample,
SMOTE,
Adaptive,
}
#[derive(Debug, Clone)]
pub struct FeatureEngineeringConfig {
pub automatic_feature_engineering: bool,
pub feature_selection: Vec<FeatureSelectionMethod>,
pub feature_scaling: FeatureScalingMethod,
pub dimensionality_reduction: DimensionalityReductionConfig,
pub interaction_detection: InteractionDetectionConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FeatureSelectionMethod {
VarianceThreshold,
UnivariateSelection,
RecursiveFeatureElimination,
FeatureImportance,
LassoRegularization,
MutualInformation,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FeatureScalingMethod {
StandardScaler,
MinMaxScaler,
RobustScaler,
Normalizer,
QuantileTransformer,
PowerTransformer,
}
#[derive(Debug, Clone)]
pub struct DimensionalityReductionConfig {
pub enable_reduction: bool,
pub methods: Vec<DimensionalityReductionMethod>,
pub target_dimensions: Option<usize>,
pub variance_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DimensionalityReductionMethod {
PCA,
ICA,
LDA,
TSNE,
UMAP,
FactorAnalysis,
}
#[derive(Debug, Clone)]
pub struct InteractionDetectionConfig {
pub enable_detection: bool,
pub methods: Vec<InteractionDetectionMethod>,
pub interaction_order: usize,
pub significance_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum InteractionDetectionMethod {
Correlation,
MutualInformation,
ANOVA,
TreeBased,
Statistical,
}
#[derive(Debug, Clone)]
pub struct OnlineLearningConfig {
pub enable_online_learning: bool,
pub learning_rate_adaptation: AdaptiveLearningRate,
pub update_frequency: UpdateFrequency,
pub concept_drift: ConceptDriftConfig,
pub memory_management: MemoryManagementConfig,
}
#[derive(Debug, Clone)]
pub struct AdaptiveLearningRate {
pub initial_rate: f64,
pub adaptation_strategy: LRAdaptationStrategy,
pub parameters: HashMap<String, f64>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LRAdaptationStrategy {
Constant,
InverseScaling,
Adaptive,
Performance,
}
#[derive(Debug, Clone)]
pub struct UpdateFrequency {
pub trigger: UpdateTrigger,
pub min_interval: Duration,
pub max_interval: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum UpdateTrigger {
TimeInterval,
DataVolume,
PerformanceDrift,
Manual,
Adaptive,
}
#[derive(Debug, Clone)]
pub struct ConceptDriftConfig {
pub enable_detection: bool,
pub detection_methods: Vec<DriftDetectionMethod>,
pub sensitivity: f64,
pub response_strategy: DriftResponseStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DriftDetectionMethod {
StatisticalTest,
PerformanceMonitoring,
DistributionComparison,
EnsembleBased,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DriftResponseStrategy {
Retrain,
Adapt,
EnsembleUpdate,
ModelSwitch,
}
#[derive(Debug, Clone)]
pub struct MemoryManagementConfig {
pub window_size: usize,
pub forgetting_factor: f64,
pub strategy: MemoryStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum MemoryStrategy {
FixedWindow,
SlidingWindow,
FadingMemory,
Adaptive,
}
#[derive(Debug, Clone)]
pub struct TransferLearningConfig {
pub enable_transfer_learning: bool,
pub transfer_strategies: Vec<TransferStrategy>,
pub source_domain: SourceDomainConfig,
pub domain_adaptation: DomainAdaptationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TransferStrategy {
FeatureExtraction,
FineTuning,
DomainAdaptation,
TaskSpecificLayers,
MetaLearning,
}
#[derive(Debug, Clone)]
pub struct SourceDomainConfig {
pub domain_id: String,
pub similarity_metrics: Vec<SimilarityMetric>,
pub eligibility_criteria: EligibilityCriteria,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SimilarityMetric {
Statistical,
Distributional,
Performance,
Structural,
}
#[derive(Debug, Clone)]
pub struct EligibilityCriteria {
pub min_similarity: f64,
pub performance_requirements: PerformanceRequirements,
pub data_requirements: DataRequirements,
}
#[derive(Debug, Clone)]
pub struct PerformanceRequirements {
pub min_source_accuracy: f64,
pub expected_benefit: f64,
}
#[derive(Debug, Clone)]
pub struct DataRequirements {
pub min_source_size: usize,
pub min_target_size: usize,
pub quality_requirements: DataQualityRequirements,
}
#[derive(Debug, Clone)]
pub struct DataQualityRequirements {
pub min_completeness: f64,
pub max_noise_level: f64,
pub consistency_requirements: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct DomainAdaptationConfig {
pub methods: Vec<DomainAdaptationMethod>,
pub adaptation_strength: f64,
pub validation_strategy: AdaptationValidationStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DomainAdaptationMethod {
FeatureAlignment,
DistributionMatching,
AdversarialTraining,
CorrectionModels,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AdaptationValidationStrategy {
TargetValidation,
SourceValidation,
CombinedValidation,
UnsupervisedMetrics,
}
impl Default for MLOptimizationConfig {
fn default() -> Self {
Self {
enable_ml_optimization: true,
ml_models: vec![
MLModelType::NeuralNetwork,
MLModelType::BayesianOptimization,
],
training_config: MLTrainingConfig::default(),
feature_engineering: FeatureEngineeringConfig::default(),
online_learning: OnlineLearningConfig::default(),
transfer_learning: TransferLearningConfig::default(),
}
}
}
impl Default for FeatureEngineeringConfig {
fn default() -> Self {
Self {
automatic_feature_engineering: true,
feature_selection: vec![
FeatureSelectionMethod::VarianceThreshold,
FeatureSelectionMethod::FeatureImportance,
],
feature_scaling: FeatureScalingMethod::StandardScaler,
dimensionality_reduction: DimensionalityReductionConfig::default(),
interaction_detection: InteractionDetectionConfig::default(),
}
}
}
impl Default for OnlineLearningConfig {
fn default() -> Self {
Self {
enable_online_learning: true,
learning_rate_adaptation: AdaptiveLearningRate::default(),
update_frequency: UpdateFrequency::default(),
concept_drift: ConceptDriftConfig::default(),
memory_management: MemoryManagementConfig::default(),
}
}
}
impl Default for TransferLearningConfig {
fn default() -> Self {
Self {
enable_transfer_learning: true,
transfer_strategies: vec![TransferStrategy::FeatureExtraction],
source_domain: SourceDomainConfig::default(),
domain_adaptation: DomainAdaptationConfig::default(),
}
}
}
impl Default for TrainingDataConfig {
fn default() -> Self {
Self {
min_training_samples: 1000,
data_collection_strategy: DataCollectionStrategy::Adaptive,
preprocessing: DataPreprocessingConfig::default(),
augmentation: DataAugmentationConfig::default(),
}
}
}
impl Default for DataPreprocessingConfig {
fn default() -> Self {
Self {
normalization: NormalizationMethod::ZScore,
outlier_handling: OutlierHandling::Cap,
missing_value_strategy: MissingValueStrategy::Impute,
validation_rules: vec![],
}
}
}
impl Default for DataAugmentationConfig {
fn default() -> Self {
Self {
enable_augmentation: false,
techniques: vec![],
augmentation_ratio: 0.1,
}
}
}
impl Default for ModelHyperparameters {
fn default() -> Self {
Self {
learning_rate: 0.001,
batch_size: 32,
epochs: 100,
model_specific: HashMap::new(),
optimization: HyperparameterOptimization::default(),
}
}
}
impl Default for HyperparameterOptimization {
fn default() -> Self {
Self {
enable_optimization: false,
strategy: HyperparameterStrategy::RandomSearch,
search_space: SearchSpaceConfig::default(),
optimization_budget: OptimizationBudget::default(),
}
}
}
impl Default for OptimizationBudget {
fn default() -> Self {
Self {
max_evaluations: 100,
max_time: Duration::from_secs(3600),
early_stopping: EarlyStoppingCriteria::default(),
}
}
}
impl Default for EarlyStoppingCriteria {
fn default() -> Self {
Self {
patience: 20,
min_improvement: 0.001,
improvement_metric: "validation_loss".to_string(),
}
}
}
impl Default for TrainingOptimizationConfig {
fn default() -> Self {
Self {
optimizer: OptimizerType::Adam,
lr_scheduling: LearningRateScheduling::default(),
gradient_clipping: GradientClippingConfig::default(),
loss_function: LossFunctionConfig::default(),
}
}
}
impl Default for LearningRateScheduling {
fn default() -> Self {
Self {
enable_scheduling: false,
strategy: LRSchedulingStrategy::ReduceOnPlateau,
parameters: HashMap::new(),
}
}
}
impl Default for GradientClippingConfig {
fn default() -> Self {
Self {
enable_clipping: true,
method: ClippingMethod::Norm,
threshold: 1.0,
}
}
}
impl Default for LossFunctionConfig {
fn default() -> Self {
Self {
primary_loss: LossFunction::MeanSquaredError,
auxiliary_losses: vec![],
weighting_scheme: LossWeightingScheme::Static,
}
}
}
impl Default for RegularizationConfig {
fn default() -> Self {
Self {
l1_strength: 0.0,
l2_strength: 0.001,
dropout_rate: 0.1,
batch_normalization: true,
additional_techniques: vec![],
}
}
}
impl Default for EarlyStoppingConfig {
fn default() -> Self {
Self {
enable_early_stopping: true,
patience: 10,
min_delta: 0.001,
monitor_metric: "validation_loss".to_string(),
improvement_direction: ImprovementDirection::Minimize,
}
}
}
impl Default for CrossValidationConfig {
fn default() -> Self {
Self {
enable_cv: true,
folds: 5,
strategy: CVStrategy::KFold,
stratification: StratificationConfig::default(),
}
}
}
impl Default for StratificationConfig {
fn default() -> Self {
Self {
enable_stratification: false,
stratification_variable: String::new(),
balance_strategy: BalanceStrategy::None,
}
}
}
impl Default for DimensionalityReductionConfig {
fn default() -> Self {
Self {
enable_reduction: false,
methods: vec![DimensionalityReductionMethod::PCA],
target_dimensions: None,
variance_threshold: 0.95,
}
}
}
impl Default for InteractionDetectionConfig {
fn default() -> Self {
Self {
enable_detection: false,
methods: vec![InteractionDetectionMethod::Correlation],
interaction_order: 2,
significance_threshold: 0.05,
}
}
}
impl Default for AdaptiveLearningRate {
fn default() -> Self {
Self {
initial_rate: 0.001,
adaptation_strategy: LRAdaptationStrategy::Adaptive,
parameters: HashMap::new(),
}
}
}
impl Default for UpdateFrequency {
fn default() -> Self {
Self {
trigger: UpdateTrigger::TimeInterval,
min_interval: Duration::from_secs(300),
max_interval: Duration::from_secs(3600),
}
}
}
impl Default for ConceptDriftConfig {
fn default() -> Self {
Self {
enable_detection: true,
detection_methods: vec![DriftDetectionMethod::PerformanceMonitoring],
sensitivity: 0.05,
response_strategy: DriftResponseStrategy::Adapt,
}
}
}
impl Default for MemoryManagementConfig {
fn default() -> Self {
Self {
window_size: 10000,
forgetting_factor: 0.99,
strategy: MemoryStrategy::SlidingWindow,
}
}
}
impl Default for SourceDomainConfig {
fn default() -> Self {
Self {
domain_id: String::new(),
similarity_metrics: vec![SimilarityMetric::Statistical],
eligibility_criteria: EligibilityCriteria::default(),
}
}
}
impl Default for EligibilityCriteria {
fn default() -> Self {
Self {
min_similarity: 0.7,
performance_requirements: PerformanceRequirements::default(),
data_requirements: DataRequirements::default(),
}
}
}
impl Default for PerformanceRequirements {
fn default() -> Self {
Self {
min_source_accuracy: 0.8,
expected_benefit: 0.1,
}
}
}
impl Default for DataRequirements {
fn default() -> Self {
Self {
min_source_size: 1000,
min_target_size: 100,
quality_requirements: DataQualityRequirements::default(),
}
}
}
impl Default for DataQualityRequirements {
fn default() -> Self {
Self {
min_completeness: 0.9,
max_noise_level: 0.1,
consistency_requirements: vec![],
}
}
}
impl Default for DomainAdaptationConfig {
fn default() -> Self {
Self {
methods: vec![DomainAdaptationMethod::FeatureAlignment],
adaptation_strength: 0.5,
validation_strategy: AdaptationValidationStrategy::CombinedValidation,
}
}
}