1use std::time::Duration;
4
5#[derive(Debug, Clone)]
7pub struct MetaLearningConfig {
8 pub enable_transfer_learning: bool,
10 pub enable_few_shot_learning: bool,
12 pub experience_buffer_size: usize,
14 pub meta_learning_rate: f64,
16 pub inner_steps: usize,
18 pub feature_config: FeatureExtractionConfig,
20 pub nas_config: NeuralArchitectureSearchConfig,
22 pub portfolio_config: PortfolioManagementConfig,
24 pub multi_objective_config: MultiObjectiveConfig,
26}
27
28impl Default for MetaLearningConfig {
29 fn default() -> Self {
30 Self {
31 enable_transfer_learning: true,
32 enable_few_shot_learning: true,
33 experience_buffer_size: 10_000,
34 meta_learning_rate: 0.001,
35 inner_steps: 5,
36 feature_config: FeatureExtractionConfig::default(),
37 nas_config: NeuralArchitectureSearchConfig::default(),
38 portfolio_config: PortfolioManagementConfig::default(),
39 multi_objective_config: MultiObjectiveConfig::default(),
40 }
41 }
42}
43
44#[derive(Debug, Clone)]
46pub struct FeatureExtractionConfig {
47 pub enable_graph_features: bool,
49 pub enable_statistical_features: bool,
51 pub enable_spectral_features: bool,
53 pub enable_domain_features: bool,
55 pub selection_method: FeatureSelectionMethod,
57 pub reduction_method: DimensionalityReduction,
59 pub normalization: FeatureNormalization,
61}
62
63impl Default for FeatureExtractionConfig {
64 fn default() -> Self {
65 Self {
66 enable_graph_features: true,
67 enable_statistical_features: true,
68 enable_spectral_features: true,
69 enable_domain_features: true,
70 selection_method: FeatureSelectionMethod::AutomaticRelevance,
71 reduction_method: DimensionalityReduction::PCA,
72 normalization: FeatureNormalization::StandardScaling,
73 }
74 }
75}
76
77#[derive(Debug, Clone, PartialEq, Eq)]
79pub enum FeatureSelectionMethod {
80 AutomaticRelevance,
82 MutualInformation,
84 RecursiveElimination,
86 LASSO,
88 RandomForestImportance,
90}
91
92#[derive(Debug, Clone, PartialEq, Eq)]
94pub enum DimensionalityReduction {
95 PCA,
97 ICA,
99 tSNE,
101 UMAP,
103 LDA,
105 None,
107}
108
109#[derive(Debug, Clone, PartialEq, Eq)]
111pub enum FeatureNormalization {
112 StandardScaling,
114 MinMaxScaling,
116 RobustScaling,
118 UnitVector,
120 None,
122}
123
124#[derive(Debug, Clone)]
126pub struct NeuralArchitectureSearchConfig {
127 pub enable_nas: bool,
129 pub search_space: SearchSpace,
131 pub search_strategy: SearchStrategy,
133 pub max_iterations: usize,
135 pub early_stopping: EarlyStoppingCriteria,
137 pub resource_constraints: ResourceConstraints,
139}
140
141impl Default for NeuralArchitectureSearchConfig {
142 fn default() -> Self {
143 Self {
144 enable_nas: true,
145 search_space: SearchSpace::default(),
146 search_strategy: SearchStrategy::DifferentiableNAS,
147 max_iterations: 100,
148 early_stopping: EarlyStoppingCriteria::default(),
149 resource_constraints: ResourceConstraints::default(),
150 }
151 }
152}
153
154#[derive(Debug, Clone)]
156pub struct SearchSpace {
157 pub layer_types: Vec<LayerType>,
159 pub num_layers_range: (usize, usize),
161 pub hidden_dims: Vec<usize>,
163 pub activations: Vec<ActivationFunction>,
165 pub dropout_rates: Vec<f64>,
167 pub skip_connections: bool,
169}
170
171impl Default for SearchSpace {
172 fn default() -> Self {
173 Self {
174 layer_types: vec![
175 LayerType::Dense,
176 LayerType::LSTM,
177 LayerType::GRU,
178 LayerType::Attention,
179 LayerType::Convolution1D,
180 ],
181 num_layers_range: (2, 8),
182 hidden_dims: vec![64, 128, 256, 512],
183 activations: vec![
184 ActivationFunction::ReLU,
185 ActivationFunction::Tanh,
186 ActivationFunction::Swish,
187 ActivationFunction::GELU,
188 ],
189 dropout_rates: vec![0.0, 0.1, 0.2, 0.3],
190 skip_connections: true,
191 }
192 }
193}
194
195#[derive(Debug, Clone, PartialEq, Eq)]
197pub enum LayerType {
198 Dense,
200 LSTM,
202 GRU,
204 Attention,
206 Convolution1D,
208 Normalization,
210 ResidualBlock,
212}
213
214#[derive(Debug, Clone, PartialEq)]
216pub enum ActivationFunction {
217 ReLU,
218 Tanh,
219 Sigmoid,
220 Swish,
221 GELU,
222 LeakyReLU(f64),
223 ELU(f64),
224}
225
226#[derive(Debug, Clone, PartialEq, Eq)]
228pub enum SearchStrategy {
229 DifferentiableNAS,
231 EvolutionarySearch,
233 ReinforcementLearning,
235 BayesianOptimization,
237 RandomSearch,
239 ProgressiveSearch,
241}
242
243#[derive(Debug, Clone)]
245pub struct EarlyStoppingCriteria {
246 pub patience: usize,
248 pub min_improvement: f64,
250 pub max_runtime: Duration,
252 pub target_performance: Option<f64>,
254}
255
256impl Default for EarlyStoppingCriteria {
257 fn default() -> Self {
258 Self {
259 patience: 10,
260 min_improvement: 0.001,
261 max_runtime: Duration::from_secs(2 * 3600), target_performance: None,
263 }
264 }
265}
266
267#[derive(Debug, Clone)]
269pub struct ResourceConstraints {
270 pub max_memory: usize,
272 pub max_training_time: Duration,
274 pub max_parameters: usize,
276 pub max_flops: usize,
278}
279
280impl Default for ResourceConstraints {
281 fn default() -> Self {
282 Self {
283 max_memory: 2048,
284 max_training_time: Duration::from_secs(10 * 60), max_parameters: 1_000_000,
286 max_flops: 1_000_000_000,
287 }
288 }
289}
290
291#[derive(Debug, Clone)]
293pub struct PortfolioManagementConfig {
294 pub enable_dynamic_portfolio: bool,
296 pub max_portfolio_size: usize,
298 pub selection_strategy: AlgorithmSelectionStrategy,
300 pub evaluation_window: Duration,
302 pub diversity_criteria: DiversityCriteria,
304}
305
306impl Default for PortfolioManagementConfig {
307 fn default() -> Self {
308 Self {
309 enable_dynamic_portfolio: true,
310 max_portfolio_size: 10,
311 selection_strategy: AlgorithmSelectionStrategy::MultiArmedBandit,
312 evaluation_window: Duration::from_secs(24 * 3600), diversity_criteria: DiversityCriteria::default(),
314 }
315 }
316}
317
318#[derive(Debug, Clone, PartialEq)]
320pub enum AlgorithmSelectionStrategy {
321 MultiArmedBandit,
323 UpperConfidenceBound,
325 ThompsonSampling,
327 EpsilonGreedy(f64),
329 CollaborativeFiltering,
331 MetaLearningBased,
333}
334
335#[derive(Debug, Clone)]
337pub struct DiversityCriteria {
338 pub min_performance_diversity: f64,
340 pub min_algorithmic_diversity: f64,
342 pub diversity_method: DiversityMethod,
344}
345
346impl Default for DiversityCriteria {
347 fn default() -> Self {
348 Self {
349 min_performance_diversity: 0.1,
350 min_algorithmic_diversity: 0.2,
351 diversity_method: DiversityMethod::KullbackLeibler,
352 }
353 }
354}
355
356#[derive(Debug, Clone, PartialEq, Eq)]
358pub enum DiversityMethod {
359 KullbackLeibler,
361 JensenShannon,
363 CosineDistance,
365 EuclideanDistance,
367 HammingDistance,
369}
370
371#[derive(Debug, Clone)]
373pub struct MultiObjectiveConfig {
374 pub enable_multi_objective: bool,
376 pub objectives: Vec<OptimizationObjective>,
378 pub pareto_config: ParetoFrontierConfig,
380 pub scalarization: ScalarizationMethod,
382 pub constraint_handling: ConstraintHandling,
384}
385
386impl Default for MultiObjectiveConfig {
387 fn default() -> Self {
388 Self {
389 enable_multi_objective: true,
390 objectives: vec![
391 OptimizationObjective::SolutionQuality,
392 OptimizationObjective::Runtime,
393 OptimizationObjective::ResourceUsage,
394 ],
395 pareto_config: ParetoFrontierConfig::default(),
396 scalarization: ScalarizationMethod::WeightedSum,
397 constraint_handling: ConstraintHandling::PenaltyMethod,
398 }
399 }
400}
401
402#[derive(Debug, Clone, PartialEq, Eq)]
404pub enum OptimizationObjective {
405 SolutionQuality,
407 Runtime,
409 ResourceUsage,
411 EnergyConsumption,
413 Robustness,
415 Scalability,
417 Custom(String),
419}
420
421#[derive(Debug, Clone)]
423pub struct ParetoFrontierConfig {
424 pub max_frontier_size: usize,
426 pub dominance_tolerance: f64,
428 pub update_strategy: FrontierUpdateStrategy,
430 pub crowding_weight: f64,
432}
433
434impl Default for ParetoFrontierConfig {
435 fn default() -> Self {
436 Self {
437 max_frontier_size: 100,
438 dominance_tolerance: 1e-6,
439 update_strategy: FrontierUpdateStrategy::NonDominatedSort,
440 crowding_weight: 0.5,
441 }
442 }
443}
444
445#[derive(Debug, Clone, PartialEq, Eq)]
447pub enum FrontierUpdateStrategy {
448 NonDominatedSort,
450 EpsilonDominance,
452 HypervolumeBased,
454 ReferencePointBased,
456}
457
458#[derive(Debug, Clone, PartialEq, Eq)]
460pub enum ScalarizationMethod {
461 WeightedSum,
463 WeightedTchebycheff,
465 AchievementScalarizing,
467 PenaltyBoundaryIntersection,
469 ReferencePoint,
471}
472
473#[derive(Debug, Clone, PartialEq, Eq)]
475pub enum ConstraintHandling {
476 PenaltyMethod,
478 BarrierMethod,
480 LagrangianMethod,
482 FeasibilityRules,
484 MultiObjectiveConstraint,
486}
487
488#[cfg(test)]
489mod tests {
490 use super::*;
491
492 #[test]
493 fn test_meta_learning_config_default() {
494 let config = MetaLearningConfig::default();
495 assert!(config.enable_transfer_learning);
496 assert!(config.enable_few_shot_learning);
497 assert_eq!(config.experience_buffer_size, 10_000);
498 }
499
500 #[test]
501 fn test_feature_extraction_config() {
502 let config = FeatureExtractionConfig::default();
503 assert!(config.enable_graph_features);
504 assert_eq!(
505 config.selection_method,
506 FeatureSelectionMethod::AutomaticRelevance
507 );
508 }
509
510 #[test]
511 fn test_nas_config() {
512 let config = NeuralArchitectureSearchConfig::default();
513 assert!(config.enable_nas);
514 assert_eq!(config.max_iterations, 100);
515 assert_eq!(config.search_strategy, SearchStrategy::DifferentiableNAS);
516 }
517}