1use std::collections::HashMap;
4use std::time::Duration;
5
6#[derive(Debug, Clone)]
8pub struct MLOptimizationConfig {
9 pub enable_ml_optimization: bool,
11 pub ml_models: Vec<MLModelType>,
13 pub training_config: MLTrainingConfig,
15 pub feature_engineering: FeatureEngineeringConfig,
17 pub online_learning: OnlineLearningConfig,
19 pub transfer_learning: TransferLearningConfig,
21}
22
23#[derive(Debug, Clone, PartialEq)]
25pub enum MLModelType {
26 NeuralNetwork,
27 RandomForest,
28 SupportVectorMachine,
29 GradientBoosting,
30 BayesianOptimization,
31 ReinforcementLearning,
32 GaussianProcess,
33 EnsembleModel,
34}
35
36#[derive(Debug, Clone)]
38pub struct MLTrainingConfig {
39 pub training_data: TrainingDataConfig,
41 pub hyperparameters: ModelHyperparameters,
43 pub optimization: TrainingOptimizationConfig,
45 pub regularization: RegularizationConfig,
47 pub early_stopping: EarlyStoppingConfig,
49 pub cross_validation: CrossValidationConfig,
51}
52
53#[derive(Debug, Clone)]
55pub struct TrainingDataConfig {
56 pub min_training_samples: usize,
58 pub data_collection_strategy: DataCollectionStrategy,
60 pub preprocessing: DataPreprocessingConfig,
62 pub augmentation: DataAugmentationConfig,
64}
65
66#[derive(Debug, Clone, PartialEq)]
68pub enum DataCollectionStrategy {
69 Passive,
70 Active,
71 Adaptive,
72 Balanced,
73 Targeted,
74}
75
76#[derive(Debug, Clone)]
78pub struct DataPreprocessingConfig {
79 pub normalization: NormalizationMethod,
81 pub outlier_handling: OutlierHandling,
83 pub missing_value_strategy: MissingValueStrategy,
85 pub validation_rules: Vec<DataValidationRule>,
87}
88
89#[derive(Debug, Clone, PartialEq)]
91pub enum NormalizationMethod {
92 MinMax,
93 ZScore,
94 Robust,
95 Quantile,
96 None,
97}
98
99#[derive(Debug, Clone, PartialEq)]
101pub enum OutlierHandling {
102 Remove,
103 Cap,
104 Transform,
105 Ignore,
106}
107
108#[derive(Debug, Clone, PartialEq)]
110pub enum MissingValueStrategy {
111 Remove,
112 Impute,
113 Interpolate,
114 Forward,
115 Backward,
116}
117
118#[derive(Debug, Clone)]
120pub struct DataValidationRule {
121 pub name: String,
123 pub condition: ValidationCondition,
125 pub failure_action: ValidationFailureAction,
127}
128
129#[derive(Debug, Clone, PartialEq)]
131pub enum ValidationCondition {
132 RangeCheck(f64, f64),
133 NotNull,
134 UniqueValues,
135 Custom(String),
136}
137
138#[derive(Debug, Clone, PartialEq)]
140pub enum ValidationFailureAction {
141 Reject,
142 Warn,
143 Transform,
144 Ignore,
145}
146
147#[derive(Debug, Clone)]
149pub struct DataAugmentationConfig {
150 pub enable_augmentation: bool,
152 pub techniques: Vec<AugmentationTechnique>,
154 pub augmentation_ratio: f64,
156}
157
158#[derive(Debug, Clone, PartialEq)]
160pub enum AugmentationTechnique {
161 NoiseInjection,
162 Rotation,
163 Scaling,
164 Permutation,
165 Interpolation,
166 Synthetic,
167}
168
169#[derive(Debug, Clone)]
171pub struct ModelHyperparameters {
172 pub learning_rate: f64,
174 pub batch_size: usize,
176 pub epochs: usize,
178 pub model_specific: HashMap<String, f64>,
180 pub optimization: HyperparameterOptimization,
182}
183
184#[derive(Debug, Clone)]
186pub struct HyperparameterOptimization {
187 pub enable_optimization: bool,
189 pub strategy: HyperparameterStrategy,
191 pub search_space: SearchSpaceConfig,
193 pub optimization_budget: OptimizationBudget,
195}
196
197#[derive(Debug, Clone, PartialEq)]
199pub enum HyperparameterStrategy {
200 GridSearch,
201 RandomSearch,
202 BayesianOptimization,
203 GeneticAlgorithm,
204 HalvingSearch,
205}
206
207#[derive(Debug, Clone)]
209pub struct SearchSpaceConfig {
210 pub parameter_ranges: HashMap<String, ParameterRange>,
212 pub categorical_parameters: HashMap<String, Vec<String>>,
214 pub constraints: Vec<ParameterConstraint>,
216}
217
218#[derive(Debug, Clone)]
220pub struct ParameterRange {
221 pub min: f64,
223 pub max: f64,
225 pub step: Option<f64>,
227 pub distribution: ParameterDistribution,
229}
230
231#[derive(Debug, Clone, PartialEq)]
233pub enum ParameterDistribution {
234 Uniform,
235 LogUniform,
236 Normal,
237 LogNormal,
238}
239
240#[derive(Debug, Clone)]
242pub struct ParameterConstraint {
243 pub name: String,
245 pub expression: String,
247 pub constraint_type: ConstraintType,
249}
250
251#[derive(Debug, Clone, PartialEq)]
253pub enum ConstraintType {
254 Equality,
255 Inequality,
256 Conditional,
257}
258
259#[derive(Debug, Clone)]
261pub struct OptimizationBudget {
262 pub max_evaluations: usize,
264 pub max_time: Duration,
266 pub early_stopping: EarlyStoppingCriteria,
268}
269
270#[derive(Debug, Clone)]
272pub struct EarlyStoppingCriteria {
273 pub patience: usize,
275 pub min_improvement: f64,
277 pub improvement_metric: String,
279}
280
281#[derive(Debug, Clone)]
283pub struct TrainingOptimizationConfig {
284 pub optimizer: OptimizerType,
286 pub lr_scheduling: LearningRateScheduling,
288 pub gradient_clipping: GradientClippingConfig,
290 pub loss_function: LossFunctionConfig,
292}
293
294#[derive(Debug, Clone, PartialEq)]
296pub enum OptimizerType {
297 SGD,
298 Adam,
299 RMSprop,
300 AdaGrad,
301 LBFGS,
302}
303
304#[derive(Debug, Clone)]
306pub struct LearningRateScheduling {
307 pub enable_scheduling: bool,
309 pub strategy: LRSchedulingStrategy,
311 pub parameters: HashMap<String, f64>,
313}
314
315#[derive(Debug, Clone, PartialEq)]
317pub enum LRSchedulingStrategy {
318 StepDecay,
319 ExponentialDecay,
320 CosineAnnealing,
321 ReduceOnPlateau,
322 Cyclical,
323}
324
325#[derive(Debug, Clone)]
327pub struct GradientClippingConfig {
328 pub enable_clipping: bool,
330 pub method: ClippingMethod,
332 pub threshold: f64,
334}
335
336#[derive(Debug, Clone, PartialEq)]
338pub enum ClippingMethod {
339 Norm,
340 Value,
341 Global,
342}
343
344#[derive(Debug, Clone)]
346pub struct LossFunctionConfig {
347 pub primary_loss: LossFunction,
349 pub auxiliary_losses: Vec<AuxiliaryLoss>,
351 pub weighting_scheme: LossWeightingScheme,
353}
354
355#[derive(Debug, Clone, PartialEq)]
357pub enum LossFunction {
358 MeanSquaredError,
359 MeanAbsoluteError,
360 Huber,
361 CrossEntropy,
362 FocalLoss,
363 Custom(String),
364}
365
366#[derive(Debug, Clone)]
368pub struct AuxiliaryLoss {
369 pub loss_function: LossFunction,
371 pub weight: f64,
373 pub scope: String,
375}
376
377#[derive(Debug, Clone, PartialEq)]
379pub enum LossWeightingScheme {
380 Static,
381 Dynamic,
382 Adaptive,
383 Uncertainty,
384}
385
386#[derive(Debug, Clone)]
388pub struct RegularizationConfig {
389 pub l1_strength: f64,
391 pub l2_strength: f64,
393 pub dropout_rate: f64,
395 pub batch_normalization: bool,
397 pub additional_techniques: Vec<RegularizationTechnique>,
399}
400
401#[derive(Debug, Clone, PartialEq)]
403pub enum RegularizationTechnique {
404 Dropout,
405 BatchNorm,
406 LayerNorm,
407 WeightDecay,
408 EarlyStop,
409 DataAugmentation,
410}
411
412#[derive(Debug, Clone)]
414pub struct EarlyStoppingConfig {
415 pub enable_early_stopping: bool,
417 pub patience: usize,
419 pub min_delta: f64,
421 pub monitor_metric: String,
423 pub improvement_direction: ImprovementDirection,
425}
426
427#[derive(Debug, Clone, PartialEq)]
429pub enum ImprovementDirection {
430 Maximize,
431 Minimize,
432}
433
434#[derive(Debug, Clone)]
436pub struct CrossValidationConfig {
437 pub enable_cv: bool,
439 pub folds: usize,
441 pub strategy: CVStrategy,
443 pub stratification: StratificationConfig,
445}
446
447#[derive(Debug, Clone, PartialEq)]
449pub enum CVStrategy {
450 KFold,
451 StratifiedKFold,
452 TimeSeriesSplit,
453 GroupKFold,
454 LeaveOneOut,
455}
456
457#[derive(Debug, Clone)]
459pub struct StratificationConfig {
460 pub enable_stratification: bool,
462 pub stratification_variable: String,
464 pub balance_strategy: BalanceStrategy,
466}
467
468#[derive(Debug, Clone, PartialEq)]
470pub enum BalanceStrategy {
471 None,
472 Oversample,
473 Undersample,
474 SMOTE,
475 Adaptive,
476}
477
478#[derive(Debug, Clone)]
480pub struct FeatureEngineeringConfig {
481 pub automatic_feature_engineering: bool,
483 pub feature_selection: Vec<FeatureSelectionMethod>,
485 pub feature_scaling: FeatureScalingMethod,
487 pub dimensionality_reduction: DimensionalityReductionConfig,
489 pub interaction_detection: InteractionDetectionConfig,
491}
492
493#[derive(Debug, Clone, PartialEq)]
495pub enum FeatureSelectionMethod {
496 VarianceThreshold,
497 UnivariateSelection,
498 RecursiveFeatureElimination,
499 FeatureImportance,
500 LassoRegularization,
501 MutualInformation,
502}
503
504#[derive(Debug, Clone, PartialEq)]
506pub enum FeatureScalingMethod {
507 StandardScaler,
508 MinMaxScaler,
509 RobustScaler,
510 Normalizer,
511 QuantileTransformer,
512 PowerTransformer,
513}
514
515#[derive(Debug, Clone)]
517pub struct DimensionalityReductionConfig {
518 pub enable_reduction: bool,
520 pub methods: Vec<DimensionalityReductionMethod>,
522 pub target_dimensions: Option<usize>,
524 pub variance_threshold: f64,
526}
527
528#[derive(Debug, Clone, PartialEq)]
530pub enum DimensionalityReductionMethod {
531 PCA,
532 ICA,
533 LDA,
534 TSNE,
535 UMAP,
536 FactorAnalysis,
537}
538
539#[derive(Debug, Clone)]
541pub struct InteractionDetectionConfig {
542 pub enable_detection: bool,
544 pub methods: Vec<InteractionDetectionMethod>,
546 pub interaction_order: usize,
548 pub significance_threshold: f64,
550}
551
552#[derive(Debug, Clone, PartialEq)]
554pub enum InteractionDetectionMethod {
555 Correlation,
556 MutualInformation,
557 ANOVA,
558 TreeBased,
559 Statistical,
560}
561
562#[derive(Debug, Clone)]
564pub struct OnlineLearningConfig {
565 pub enable_online_learning: bool,
567 pub learning_rate_adaptation: AdaptiveLearningRate,
569 pub update_frequency: UpdateFrequency,
571 pub concept_drift: ConceptDriftConfig,
573 pub memory_management: MemoryManagementConfig,
575}
576
577#[derive(Debug, Clone)]
579pub struct AdaptiveLearningRate {
580 pub initial_rate: f64,
582 pub adaptation_strategy: LRAdaptationStrategy,
584 pub parameters: HashMap<String, f64>,
586}
587
588#[derive(Debug, Clone, PartialEq)]
590pub enum LRAdaptationStrategy {
591 Constant,
592 InverseScaling,
593 Adaptive,
594 Performance,
595}
596
597#[derive(Debug, Clone)]
599pub struct UpdateFrequency {
600 pub trigger: UpdateTrigger,
602 pub min_interval: Duration,
604 pub max_interval: Duration,
606}
607
608#[derive(Debug, Clone, PartialEq)]
610pub enum UpdateTrigger {
611 TimeInterval,
612 DataVolume,
613 PerformanceDrift,
614 Manual,
615 Adaptive,
616}
617
618#[derive(Debug, Clone)]
620pub struct ConceptDriftConfig {
621 pub enable_detection: bool,
623 pub detection_methods: Vec<DriftDetectionMethod>,
625 pub sensitivity: f64,
627 pub response_strategy: DriftResponseStrategy,
629}
630
631#[derive(Debug, Clone, PartialEq)]
633pub enum DriftDetectionMethod {
634 StatisticalTest,
635 PerformanceMonitoring,
636 DistributionComparison,
637 EnsembleBased,
638}
639
640#[derive(Debug, Clone, PartialEq)]
642pub enum DriftResponseStrategy {
643 Retrain,
644 Adapt,
645 EnsembleUpdate,
646 ModelSwitch,
647}
648
649#[derive(Debug, Clone)]
651pub struct MemoryManagementConfig {
652 pub window_size: usize,
654 pub forgetting_factor: f64,
656 pub strategy: MemoryStrategy,
658}
659
660#[derive(Debug, Clone, PartialEq)]
662pub enum MemoryStrategy {
663 FixedWindow,
664 SlidingWindow,
665 FadingMemory,
666 Adaptive,
667}
668
669#[derive(Debug, Clone)]
671pub struct TransferLearningConfig {
672 pub enable_transfer_learning: bool,
674 pub transfer_strategies: Vec<TransferStrategy>,
676 pub source_domain: SourceDomainConfig,
678 pub domain_adaptation: DomainAdaptationConfig,
680}
681
682#[derive(Debug, Clone, PartialEq)]
684pub enum TransferStrategy {
685 FeatureExtraction,
686 FineTuning,
687 DomainAdaptation,
688 TaskSpecificLayers,
689 MetaLearning,
690}
691
692#[derive(Debug, Clone)]
694pub struct SourceDomainConfig {
695 pub domain_id: String,
697 pub similarity_metrics: Vec<SimilarityMetric>,
699 pub eligibility_criteria: EligibilityCriteria,
701}
702
703#[derive(Debug, Clone, PartialEq)]
705pub enum SimilarityMetric {
706 Statistical,
707 Distributional,
708 Performance,
709 Structural,
710}
711
712#[derive(Debug, Clone)]
714pub struct EligibilityCriteria {
715 pub min_similarity: f64,
717 pub performance_requirements: PerformanceRequirements,
719 pub data_requirements: DataRequirements,
721}
722
723#[derive(Debug, Clone)]
725pub struct PerformanceRequirements {
726 pub min_source_accuracy: f64,
728 pub expected_benefit: f64,
730}
731
732#[derive(Debug, Clone)]
734pub struct DataRequirements {
735 pub min_source_size: usize,
737 pub min_target_size: usize,
739 pub quality_requirements: DataQualityRequirements,
741}
742
743#[derive(Debug, Clone)]
745pub struct DataQualityRequirements {
746 pub min_completeness: f64,
748 pub max_noise_level: f64,
750 pub consistency_requirements: Vec<String>,
752}
753
754#[derive(Debug, Clone)]
756pub struct DomainAdaptationConfig {
757 pub methods: Vec<DomainAdaptationMethod>,
759 pub adaptation_strength: f64,
761 pub validation_strategy: AdaptationValidationStrategy,
763}
764
765#[derive(Debug, Clone, PartialEq)]
767pub enum DomainAdaptationMethod {
768 FeatureAlignment,
769 DistributionMatching,
770 AdversarialTraining,
771 CorrectionModels,
772}
773
774#[derive(Debug, Clone, PartialEq)]
776pub enum AdaptationValidationStrategy {
777 TargetValidation,
778 SourceValidation,
779 CombinedValidation,
780 UnsupervisedMetrics,
781}
782
783impl Default for MLOptimizationConfig {
786 fn default() -> Self {
787 Self {
788 enable_ml_optimization: true,
789 ml_models: vec![
790 MLModelType::NeuralNetwork,
791 MLModelType::BayesianOptimization,
792 ],
793 training_config: MLTrainingConfig::default(),
794 feature_engineering: FeatureEngineeringConfig::default(),
795 online_learning: OnlineLearningConfig::default(),
796 transfer_learning: TransferLearningConfig::default(),
797 }
798 }
799}
800
801impl Default for MLTrainingConfig {
802 fn default() -> Self {
803 Self {
804 training_data: TrainingDataConfig::default(),
805 hyperparameters: ModelHyperparameters::default(),
806 optimization: TrainingOptimizationConfig::default(),
807 regularization: RegularizationConfig::default(),
808 early_stopping: EarlyStoppingConfig::default(),
809 cross_validation: CrossValidationConfig::default(),
810 }
811 }
812}
813
814impl Default for FeatureEngineeringConfig {
815 fn default() -> Self {
816 Self {
817 automatic_feature_engineering: true,
818 feature_selection: vec![
819 FeatureSelectionMethod::VarianceThreshold,
820 FeatureSelectionMethod::FeatureImportance,
821 ],
822 feature_scaling: FeatureScalingMethod::StandardScaler,
823 dimensionality_reduction: DimensionalityReductionConfig::default(),
824 interaction_detection: InteractionDetectionConfig::default(),
825 }
826 }
827}
828
829impl Default for OnlineLearningConfig {
830 fn default() -> Self {
831 Self {
832 enable_online_learning: true,
833 learning_rate_adaptation: AdaptiveLearningRate::default(),
834 update_frequency: UpdateFrequency::default(),
835 concept_drift: ConceptDriftConfig::default(),
836 memory_management: MemoryManagementConfig::default(),
837 }
838 }
839}
840
841impl Default for TransferLearningConfig {
842 fn default() -> Self {
843 Self {
844 enable_transfer_learning: true,
845 transfer_strategies: vec![TransferStrategy::FeatureExtraction],
846 source_domain: SourceDomainConfig::default(),
847 domain_adaptation: DomainAdaptationConfig::default(),
848 }
849 }
850}
851
852impl Default for TrainingDataConfig {
856 fn default() -> Self {
857 Self {
858 min_training_samples: 1000,
859 data_collection_strategy: DataCollectionStrategy::Adaptive,
860 preprocessing: DataPreprocessingConfig::default(),
861 augmentation: DataAugmentationConfig::default(),
862 }
863 }
864}
865
866impl Default for DataPreprocessingConfig {
867 fn default() -> Self {
868 Self {
869 normalization: NormalizationMethod::ZScore,
870 outlier_handling: OutlierHandling::Cap,
871 missing_value_strategy: MissingValueStrategy::Impute,
872 validation_rules: vec![],
873 }
874 }
875}
876
877impl Default for DataAugmentationConfig {
878 fn default() -> Self {
879 Self {
880 enable_augmentation: false,
881 techniques: vec![],
882 augmentation_ratio: 0.1,
883 }
884 }
885}
886
887impl Default for ModelHyperparameters {
888 fn default() -> Self {
889 Self {
890 learning_rate: 0.001,
891 batch_size: 32,
892 epochs: 100,
893 model_specific: HashMap::new(),
894 optimization: HyperparameterOptimization::default(),
895 }
896 }
897}
898
899impl Default for HyperparameterOptimization {
900 fn default() -> Self {
901 Self {
902 enable_optimization: false,
903 strategy: HyperparameterStrategy::RandomSearch,
904 search_space: SearchSpaceConfig::default(),
905 optimization_budget: OptimizationBudget::default(),
906 }
907 }
908}
909
910impl Default for SearchSpaceConfig {
911 fn default() -> Self {
912 Self {
913 parameter_ranges: HashMap::new(),
914 categorical_parameters: HashMap::new(),
915 constraints: vec![],
916 }
917 }
918}
919
920impl Default for OptimizationBudget {
921 fn default() -> Self {
922 Self {
923 max_evaluations: 100,
924 max_time: Duration::from_secs(3600),
925 early_stopping: EarlyStoppingCriteria::default(),
926 }
927 }
928}
929
930impl Default for EarlyStoppingCriteria {
931 fn default() -> Self {
932 Self {
933 patience: 20,
934 min_improvement: 0.001,
935 improvement_metric: "validation_loss".to_string(),
936 }
937 }
938}
939
940impl Default for TrainingOptimizationConfig {
941 fn default() -> Self {
942 Self {
943 optimizer: OptimizerType::Adam,
944 lr_scheduling: LearningRateScheduling::default(),
945 gradient_clipping: GradientClippingConfig::default(),
946 loss_function: LossFunctionConfig::default(),
947 }
948 }
949}
950
951impl Default for LearningRateScheduling {
952 fn default() -> Self {
953 Self {
954 enable_scheduling: false,
955 strategy: LRSchedulingStrategy::ReduceOnPlateau,
956 parameters: HashMap::new(),
957 }
958 }
959}
960
961impl Default for GradientClippingConfig {
962 fn default() -> Self {
963 Self {
964 enable_clipping: true,
965 method: ClippingMethod::Norm,
966 threshold: 1.0,
967 }
968 }
969}
970
971impl Default for LossFunctionConfig {
972 fn default() -> Self {
973 Self {
974 primary_loss: LossFunction::MeanSquaredError,
975 auxiliary_losses: vec![],
976 weighting_scheme: LossWeightingScheme::Static,
977 }
978 }
979}
980
981impl Default for RegularizationConfig {
982 fn default() -> Self {
983 Self {
984 l1_strength: 0.0,
985 l2_strength: 0.001,
986 dropout_rate: 0.1,
987 batch_normalization: true,
988 additional_techniques: vec![],
989 }
990 }
991}
992
993impl Default for EarlyStoppingConfig {
994 fn default() -> Self {
995 Self {
996 enable_early_stopping: true,
997 patience: 10,
998 min_delta: 0.001,
999 monitor_metric: "validation_loss".to_string(),
1000 improvement_direction: ImprovementDirection::Minimize,
1001 }
1002 }
1003}
1004
1005impl Default for CrossValidationConfig {
1006 fn default() -> Self {
1007 Self {
1008 enable_cv: true,
1009 folds: 5,
1010 strategy: CVStrategy::KFold,
1011 stratification: StratificationConfig::default(),
1012 }
1013 }
1014}
1015
1016impl Default for StratificationConfig {
1017 fn default() -> Self {
1018 Self {
1019 enable_stratification: false,
1020 stratification_variable: String::new(),
1021 balance_strategy: BalanceStrategy::None,
1022 }
1023 }
1024}
1025
1026impl Default for DimensionalityReductionConfig {
1027 fn default() -> Self {
1028 Self {
1029 enable_reduction: false,
1030 methods: vec![DimensionalityReductionMethod::PCA],
1031 target_dimensions: None,
1032 variance_threshold: 0.95,
1033 }
1034 }
1035}
1036
1037impl Default for InteractionDetectionConfig {
1038 fn default() -> Self {
1039 Self {
1040 enable_detection: false,
1041 methods: vec![InteractionDetectionMethod::Correlation],
1042 interaction_order: 2,
1043 significance_threshold: 0.05,
1044 }
1045 }
1046}
1047
1048impl Default for AdaptiveLearningRate {
1049 fn default() -> Self {
1050 Self {
1051 initial_rate: 0.001,
1052 adaptation_strategy: LRAdaptationStrategy::Adaptive,
1053 parameters: HashMap::new(),
1054 }
1055 }
1056}
1057
1058impl Default for UpdateFrequency {
1059 fn default() -> Self {
1060 Self {
1061 trigger: UpdateTrigger::TimeInterval,
1062 min_interval: Duration::from_secs(300),
1063 max_interval: Duration::from_secs(3600),
1064 }
1065 }
1066}
1067
1068impl Default for ConceptDriftConfig {
1069 fn default() -> Self {
1070 Self {
1071 enable_detection: true,
1072 detection_methods: vec![DriftDetectionMethod::PerformanceMonitoring],
1073 sensitivity: 0.05,
1074 response_strategy: DriftResponseStrategy::Adapt,
1075 }
1076 }
1077}
1078
1079impl Default for MemoryManagementConfig {
1080 fn default() -> Self {
1081 Self {
1082 window_size: 10000,
1083 forgetting_factor: 0.99,
1084 strategy: MemoryStrategy::SlidingWindow,
1085 }
1086 }
1087}
1088
1089impl Default for SourceDomainConfig {
1090 fn default() -> Self {
1091 Self {
1092 domain_id: String::new(),
1093 similarity_metrics: vec![SimilarityMetric::Statistical],
1094 eligibility_criteria: EligibilityCriteria::default(),
1095 }
1096 }
1097}
1098
1099impl Default for EligibilityCriteria {
1100 fn default() -> Self {
1101 Self {
1102 min_similarity: 0.7,
1103 performance_requirements: PerformanceRequirements::default(),
1104 data_requirements: DataRequirements::default(),
1105 }
1106 }
1107}
1108
1109impl Default for PerformanceRequirements {
1110 fn default() -> Self {
1111 Self {
1112 min_source_accuracy: 0.8,
1113 expected_benefit: 0.1,
1114 }
1115 }
1116}
1117
1118impl Default for DataRequirements {
1119 fn default() -> Self {
1120 Self {
1121 min_source_size: 1000,
1122 min_target_size: 100,
1123 quality_requirements: DataQualityRequirements::default(),
1124 }
1125 }
1126}
1127
1128impl Default for DataQualityRequirements {
1129 fn default() -> Self {
1130 Self {
1131 min_completeness: 0.9,
1132 max_noise_level: 0.1,
1133 consistency_requirements: vec![],
1134 }
1135 }
1136}
1137
1138impl Default for DomainAdaptationConfig {
1139 fn default() -> Self {
1140 Self {
1141 methods: vec![DomainAdaptationMethod::FeatureAlignment],
1142 adaptation_strength: 0.5,
1143 validation_strategy: AdaptationValidationStrategy::CombinedValidation,
1144 }
1145 }
1146}