1use std::collections::HashMap;
7use std::time::Duration;
8
9#[derive(Debug, Clone)]
11pub struct MetaLearningConfig {
12 pub enable_transfer_learning: bool,
14 pub enable_few_shot_learning: bool,
16 pub experience_buffer_size: usize,
18 pub meta_learning_rate: f64,
20 pub inner_steps: usize,
22 pub feature_config: FeatureExtractionConfig,
24 pub nas_config: NeuralArchitectureSearchConfig,
26 pub portfolio_config: PortfolioManagementConfig,
28 pub multi_objective_config: MultiObjectiveConfig,
30}
31
32impl Default for MetaLearningConfig {
33 fn default() -> Self {
34 Self {
35 enable_transfer_learning: true,
36 enable_few_shot_learning: true,
37 experience_buffer_size: 10_000,
38 meta_learning_rate: 0.001,
39 inner_steps: 5,
40 feature_config: FeatureExtractionConfig::default(),
41 nas_config: NeuralArchitectureSearchConfig::default(),
42 portfolio_config: PortfolioManagementConfig::default(),
43 multi_objective_config: MultiObjectiveConfig::default(),
44 }
45 }
46}
47
48#[derive(Debug, Clone)]
50pub struct FeatureExtractionConfig {
51 pub enable_graph_features: bool,
53 pub enable_statistical_features: bool,
55 pub enable_spectral_features: bool,
57 pub enable_domain_features: bool,
59 pub selection_method: FeatureSelectionMethod,
61 pub reduction_method: DimensionalityReduction,
63 pub normalization: FeatureNormalization,
65}
66
67impl Default for FeatureExtractionConfig {
68 fn default() -> Self {
69 Self {
70 enable_graph_features: true,
71 enable_statistical_features: true,
72 enable_spectral_features: true,
73 enable_domain_features: true,
74 selection_method: FeatureSelectionMethod::AutomaticRelevance,
75 reduction_method: DimensionalityReduction::PCA,
76 normalization: FeatureNormalization::StandardScaling,
77 }
78 }
79}
80
81#[derive(Debug, Clone, PartialEq, Eq)]
83pub enum FeatureSelectionMethod {
84 AutomaticRelevance,
86 MutualInformation,
88 RecursiveElimination,
90 LASSO,
92 RandomForestImportance,
94}
95
96#[derive(Debug, Clone, PartialEq, Eq)]
98pub enum DimensionalityReduction {
99 PCA,
101 ICA,
103 tSNE,
105 UMAP,
107 LDA,
109 None,
111}
112
113#[derive(Debug, Clone, PartialEq, Eq)]
115pub enum FeatureNormalization {
116 StandardScaling,
118 MinMaxScaling,
120 RobustScaling,
122 UnitVector,
124 None,
126}
127
128#[derive(Debug, Clone)]
130pub struct NeuralArchitectureSearchConfig {
131 pub enable_nas: bool,
133 pub search_space: SearchSpace,
135 pub search_strategy: SearchStrategy,
137 pub max_iterations: usize,
139 pub early_stopping: EarlyStoppingCriteria,
141 pub resource_constraints: ResourceConstraints,
143}
144
145impl Default for NeuralArchitectureSearchConfig {
146 fn default() -> Self {
147 Self {
148 enable_nas: true,
149 search_space: SearchSpace::default(),
150 search_strategy: SearchStrategy::DifferentiableNAS,
151 max_iterations: 100,
152 early_stopping: EarlyStoppingCriteria::default(),
153 resource_constraints: ResourceConstraints::default(),
154 }
155 }
156}
157
158#[derive(Debug, Clone)]
160pub struct SearchSpace {
161 pub layer_types: Vec<LayerType>,
163 pub num_layers_range: (usize, usize),
165 pub hidden_dims: Vec<usize>,
167 pub activations: Vec<ActivationFunction>,
169 pub dropout_rates: Vec<f64>,
171 pub skip_connections: bool,
173}
174
175impl Default for SearchSpace {
176 fn default() -> Self {
177 Self {
178 layer_types: vec![
179 LayerType::Dense,
180 LayerType::LSTM,
181 LayerType::GRU,
182 LayerType::Attention,
183 LayerType::Convolution1D,
184 ],
185 num_layers_range: (2, 8),
186 hidden_dims: vec![64, 128, 256, 512],
187 activations: vec![
188 ActivationFunction::ReLU,
189 ActivationFunction::Tanh,
190 ActivationFunction::Swish,
191 ActivationFunction::GELU,
192 ],
193 dropout_rates: vec![0.0, 0.1, 0.2, 0.3],
194 skip_connections: true,
195 }
196 }
197}
198
199#[derive(Debug, Clone, PartialEq, Eq)]
201pub enum LayerType {
202 Dense,
204 LSTM,
206 GRU,
208 Attention,
210 Convolution1D,
212 Normalization,
214 ResidualBlock,
216}
217
218#[derive(Debug, Clone, PartialEq)]
220pub enum ActivationFunction {
221 ReLU,
222 Tanh,
223 Sigmoid,
224 Swish,
225 GELU,
226 LeakyReLU(f64),
227 ELU(f64),
228}
229
230#[derive(Debug, Clone, PartialEq, Eq)]
232pub enum SearchStrategy {
233 DifferentiableNAS,
235 EvolutionarySearch,
237 ReinforcementLearning,
239 BayesianOptimization,
241 RandomSearch,
243 ProgressiveSearch,
245}
246
247#[derive(Debug, Clone)]
249pub struct EarlyStoppingCriteria {
250 pub patience: usize,
252 pub min_improvement: f64,
254 pub max_runtime: Duration,
256 pub target_performance: Option<f64>,
258}
259
260impl Default for EarlyStoppingCriteria {
261 fn default() -> Self {
262 Self {
263 patience: 10,
264 min_improvement: 0.001,
265 max_runtime: Duration::from_secs(2 * 3600),
266 target_performance: None,
267 }
268 }
269}
270
271#[derive(Debug, Clone)]
273pub struct ResourceConstraints {
274 pub max_memory: usize,
276 pub max_training_time: Duration,
278 pub max_parameters: usize,
280 pub max_flops: usize,
282}
283
284impl Default for ResourceConstraints {
285 fn default() -> Self {
286 Self {
287 max_memory: 2048,
288 max_training_time: Duration::from_secs(10 * 60),
289 max_parameters: 1_000_000,
290 max_flops: 1_000_000_000,
291 }
292 }
293}
294
295#[derive(Debug, Clone)]
297pub struct PortfolioManagementConfig {
298 pub enable_dynamic_portfolio: bool,
300 pub max_portfolio_size: usize,
302 pub selection_strategy: AlgorithmSelectionStrategy,
304 pub evaluation_window: Duration,
306 pub diversity_criteria: DiversityCriteria,
308}
309
310impl Default for PortfolioManagementConfig {
311 fn default() -> Self {
312 Self {
313 enable_dynamic_portfolio: true,
314 max_portfolio_size: 10,
315 selection_strategy: AlgorithmSelectionStrategy::MultiArmedBandit,
316 evaluation_window: Duration::from_secs(24 * 3600),
317 diversity_criteria: DiversityCriteria::default(),
318 }
319 }
320}
321
322#[derive(Debug, Clone, PartialEq)]
324pub enum AlgorithmSelectionStrategy {
325 MultiArmedBandit,
327 UpperConfidenceBound,
329 ThompsonSampling,
331 EpsilonGreedy(f64),
333 CollaborativeFiltering,
335 MetaLearningBased,
337}
338
339#[derive(Debug, Clone)]
341pub struct DiversityCriteria {
342 pub min_performance_diversity: f64,
344 pub min_algorithmic_diversity: f64,
346 pub diversity_method: DiversityMethod,
348}
349
350impl Default for DiversityCriteria {
351 fn default() -> Self {
352 Self {
353 min_performance_diversity: 0.1,
354 min_algorithmic_diversity: 0.2,
355 diversity_method: DiversityMethod::KullbackLeibler,
356 }
357 }
358}
359
360#[derive(Debug, Clone, PartialEq, Eq)]
362pub enum DiversityMethod {
363 KullbackLeibler,
365 JensenShannon,
367 CosineDistance,
369 EuclideanDistance,
371 HammingDistance,
373}
374
375#[derive(Debug, Clone)]
377pub struct MultiObjectiveConfig {
378 pub enable_multi_objective: bool,
380 pub objectives: Vec<OptimizationObjective>,
382 pub pareto_config: ParetoFrontierConfig,
384 pub scalarization: ScalarizationMethod,
386 pub constraint_handling: ConstraintHandling,
388}
389
390impl Default for MultiObjectiveConfig {
391 fn default() -> Self {
392 Self {
393 enable_multi_objective: true,
394 objectives: vec![
395 OptimizationObjective::SolutionQuality,
396 OptimizationObjective::Runtime,
397 OptimizationObjective::ResourceUsage,
398 ],
399 pareto_config: ParetoFrontierConfig::default(),
400 scalarization: ScalarizationMethod::WeightedSum,
401 constraint_handling: ConstraintHandling::PenaltyMethod,
402 }
403 }
404}
405
406#[derive(Debug, Clone, PartialEq, Eq)]
408pub enum OptimizationObjective {
409 SolutionQuality,
411 Runtime,
413 ResourceUsage,
415 EnergyConsumption,
417 Robustness,
419 Scalability,
421 Custom(String),
423}
424
425#[derive(Debug, Clone)]
427pub struct ParetoFrontierConfig {
428 pub max_frontier_size: usize,
430 pub dominance_tolerance: f64,
432 pub update_strategy: FrontierUpdateStrategy,
434 pub crowding_weight: f64,
436}
437
438impl Default for ParetoFrontierConfig {
439 fn default() -> Self {
440 Self {
441 max_frontier_size: 100,
442 dominance_tolerance: 1e-6,
443 update_strategy: FrontierUpdateStrategy::NonDominatedSort,
444 crowding_weight: 0.5,
445 }
446 }
447}
448
449#[derive(Debug, Clone, PartialEq, Eq)]
451pub enum FrontierUpdateStrategy {
452 NonDominatedSort,
454 EpsilonDominance,
456 HypervolumeBased,
458 ReferencePointBased,
460}
461
462#[derive(Debug, Clone, PartialEq, Eq)]
464pub enum ScalarizationMethod {
465 WeightedSum,
467 WeightedTchebycheff,
469 AchievementScalarizing,
471 PenaltyBoundaryIntersection,
473 ReferencePoint,
475}
476
477#[derive(Debug, Clone, PartialEq, Eq)]
479pub enum ConstraintHandling {
480 PenaltyMethod,
482 BarrierMethod,
484 LagrangianMethod,
486 FeasibilityRules,
488 MultiObjectiveConstraint,
490}
491
492#[derive(Debug, Clone, PartialEq)]
494pub enum AlgorithmType {
495 SimulatedAnnealing,
497 QuantumAnnealing,
499 TabuSearch,
501 GeneticAlgorithm,
503 ParticleSwarm,
505 AntColony,
507 VariableNeighborhood,
509 Hybrid(Vec<Self>),
511}
512
513#[derive(Debug, Clone)]
515pub struct ArchitectureSpec {
516 pub layers: Vec<LayerSpec>,
518 pub connections: ConnectionPattern,
520 pub optimization: OptimizationSettings,
522}
523
524#[derive(Debug, Clone)]
526pub struct LayerSpec {
527 pub layer_type: LayerType,
529 pub input_dim: usize,
531 pub output_dim: usize,
533 pub activation: ActivationFunction,
535 pub dropout: f64,
537 pub parameters: HashMap<String, f64>,
539}
540
541#[derive(Debug, Clone, PartialEq, Eq)]
543pub enum ConnectionPattern {
544 Sequential,
546 SkipConnections,
548 DenseConnections,
550 ResidualConnections,
552 Custom(Vec<(usize, usize)>),
554}
555
556#[derive(Debug, Clone)]
558pub struct OptimizationSettings {
559 pub optimizer: OptimizerType,
561 pub learning_rate: f64,
563 pub batch_size: usize,
565 pub epochs: usize,
567 pub regularization: RegularizationConfig,
569}
570
571#[derive(Debug, Clone, PartialEq, Eq)]
573pub enum OptimizerType {
574 SGD,
575 Adam,
576 AdamW,
577 RMSprop,
578 Adagrad,
579 Adadelta,
580 LBFGS,
581}
582
583#[derive(Debug, Clone)]
585pub struct RegularizationConfig {
586 pub l1_weight: f64,
588 pub l2_weight: f64,
590 pub dropout: f64,
592 pub batch_norm: bool,
594 pub early_stopping: bool,
596}
597
598#[derive(Debug, Clone)]
600pub struct OptimizationConfiguration {
601 pub algorithm: AlgorithmType,
603 pub hyperparameters: HashMap<String, f64>,
605 pub architecture: Option<ArchitectureSpec>,
607 pub resources: ResourceAllocation,
609}
610
611#[derive(Debug, Clone)]
613pub struct ResourceAllocation {
614 pub cpu: f64,
616 pub memory: usize,
618 pub gpu: f64,
620 pub time: Duration,
622}
623
624#[derive(Debug, Clone, PartialEq, Eq, Hash)]
626pub enum ProblemDomain {
627 Combinatorial,
629 Portfolio,
631 Scheduling,
633 Graph,
635 MachineLearning,
637 Physics,
639 Chemistry,
641 Custom(String),
643}