1use std::collections::HashMap;
7
8#[derive(Debug, Clone)]
10pub struct SearchSpaceConfig {
11 pub algorithms: AlgorithmSearchSpace,
13
14 pub preprocessing: PreprocessingSearchSpace,
16
17 pub hyperparameters: HyperparameterSearchSpace,
19
20 pub architectures: ArchitectureSearchSpace,
22
23 pub ensembles: EnsembleSearchSpace,
25}
26
27#[derive(Debug, Clone)]
29pub struct AlgorithmSearchSpace {
30 pub quantum_neural_networks: bool,
32
33 pub quantum_svm: bool,
35
36 pub quantum_clustering: bool,
38
39 pub quantum_dim_reduction: bool,
41
42 pub quantum_time_series: bool,
44
45 pub quantum_anomaly_detection: bool,
47
48 pub classical_algorithms: bool,
50}
51
52#[derive(Debug, Clone)]
54pub struct PreprocessingSearchSpace {
55 pub scaling_methods: Vec<ScalingMethod>,
57
58 pub feature_selection: Vec<FeatureSelectionMethod>,
60
61 pub quantum_encodings: Vec<QuantumEncodingMethod>,
63
64 pub data_augmentation: bool,
66
67 pub missing_value_handling: Vec<MissingValueMethod>,
69}
70
71#[derive(Debug, Clone)]
73pub enum ScalingMethod {
74 StandardScaler,
75 MinMaxScaler,
76 RobustScaler,
77 QuantileScaler,
78 QuantumScaler,
79 NoScaling,
80}
81
82#[derive(Debug, Clone)]
84pub enum FeatureSelectionMethod {
85 VarianceThreshold { threshold: f64 },
86 UnivariateSelection { k: usize },
87 RecursiveFeatureElimination { n_features: usize },
88 QuantumFeatureSelection { method: String },
89 PrincipalComponentAnalysis { n_components: usize },
90 QuantumPCA { n_components: usize },
91}
92
93#[derive(Debug, Clone)]
95pub enum QuantumEncodingMethod {
96 AmplitudeEncoding,
97 AngleEncoding,
98 BasisEncoding,
99 QuantumFeatureMap { map_type: String },
100 VariationalEncoding { layers: usize },
101 AutomaticEncoding,
102}
103
104#[derive(Debug, Clone)]
106pub enum MissingValueMethod {
107 DropRows,
108 DropColumns,
109 MeanImputation,
110 MedianImputation,
111 ModeImputation,
112 QuantumImputation,
113 KNNImputation { k: usize },
114}
115
116#[derive(Debug, Clone)]
118pub struct HyperparameterSearchSpace {
119 pub learning_rates: (f64, f64),
121
122 pub regularization: (f64, f64),
124
125 pub batch_sizes: Vec<usize>,
127
128 pub epochs: (usize, usize),
130
131 pub quantum_params: QuantumHyperparameterSpace,
133}
134
135#[derive(Debug, Clone)]
137pub struct QuantumHyperparameterSpace {
138 pub num_qubits: (usize, usize),
140
141 pub circuit_depth: (usize, usize),
143
144 pub entanglement_strength: (f64, f64),
146
147 pub variational_params: (f64, f64),
149
150 pub measurement_strategies: Vec<String>,
152}
153
154#[derive(Debug, Clone)]
156pub struct ArchitectureSearchSpace {
157 pub network_architectures: Vec<NetworkArchitecture>,
159
160 pub quantum_architectures: Vec<QuantumArchitecture>,
162
163 pub hybrid_architectures: bool,
165
166 pub generation_strategy: ArchitectureGenerationStrategy,
168}
169
170#[derive(Debug, Clone)]
172pub enum NetworkArchitecture {
173 MLP {
174 hidden_layers: Vec<usize>,
175 },
176 CNN {
177 conv_layers: Vec<ConvLayer>,
178 fc_layers: Vec<usize>,
179 },
180 RNN {
181 rnn_type: String,
182 hidden_size: usize,
183 num_layers: usize,
184 },
185 Transformer {
186 num_heads: usize,
187 hidden_dim: usize,
188 num_layers: usize,
189 },
190 Autoencoder {
191 encoder_layers: Vec<usize>,
192 decoder_layers: Vec<usize>,
193 },
194}
195
196#[derive(Debug, Clone)]
198pub struct ConvLayer {
199 pub filters: usize,
200 pub kernel_size: usize,
201 pub stride: usize,
202 pub padding: usize,
203}
204
205#[derive(Debug, Clone)]
207pub enum QuantumArchitecture {
208 VariationalCircuit {
209 layers: Vec<String>,
210 depth: usize,
211 },
212 QuantumConvolutional {
213 pooling: String,
214 layers: usize,
215 },
216 QuantumRNN {
217 quantum_cells: usize,
218 classical_layers: usize,
219 },
220 HardwareEfficient {
221 connectivity: String,
222 repetitions: usize,
223 },
224 ProblemInspired {
225 problem_type: String,
226 ansatz: String,
227 },
228}
229
230#[derive(Debug, Clone)]
232pub enum ArchitectureGenerationStrategy {
233 Random,
234 Evolutionary,
235 GradientBased,
236 BayesianOptimization,
237 QuantumInspired,
238 Reinforcement,
239}
240
241#[derive(Debug, Clone)]
243pub struct EnsembleSearchSpace {
244 pub enabled: bool,
246
247 pub max_ensemble_size: usize,
249
250 pub combination_methods: Vec<EnsembleCombinationMethod>,
252
253 pub diversity_strategies: Vec<EnsembleDiversityStrategy>,
255}
256
257#[derive(Debug, Clone)]
259pub enum EnsembleCombinationMethod {
260 Voting,
261 Averaging,
262 WeightedAveraging,
263 Stacking,
264 Blending,
265 QuantumSuperposition,
266 BayesianModelAveraging,
267}
268
269#[derive(Debug, Clone)]
271pub enum EnsembleDiversityStrategy {
272 Bagging,
273 Boosting,
274 RandomSubspaces,
275 QuantumDiversity,
276 DifferentAlgorithms,
277 DifferentHyperparameters,
278}
279
280impl Default for SearchSpaceConfig {
282 fn default() -> Self {
283 Self {
284 algorithms: AlgorithmSearchSpace::default(),
285 preprocessing: PreprocessingSearchSpace::default(),
286 hyperparameters: HyperparameterSearchSpace::default(),
287 architectures: ArchitectureSearchSpace::default(),
288 ensembles: EnsembleSearchSpace::default(),
289 }
290 }
291}
292
293impl Default for AlgorithmSearchSpace {
294 fn default() -> Self {
295 Self {
296 quantum_neural_networks: true,
297 quantum_svm: true,
298 quantum_clustering: false,
299 quantum_dim_reduction: false,
300 quantum_time_series: false,
301 quantum_anomaly_detection: false,
302 classical_algorithms: true,
303 }
304 }
305}
306
307impl Default for PreprocessingSearchSpace {
308 fn default() -> Self {
309 Self {
310 scaling_methods: vec![
311 ScalingMethod::StandardScaler,
312 ScalingMethod::MinMaxScaler,
313 ScalingMethod::NoScaling,
314 ],
315 feature_selection: vec![
316 FeatureSelectionMethod::VarianceThreshold { threshold: 0.01 },
317 FeatureSelectionMethod::UnivariateSelection { k: 10 },
318 ],
319 quantum_encodings: vec![
320 QuantumEncodingMethod::AngleEncoding,
321 QuantumEncodingMethod::AmplitudeEncoding,
322 ],
323 data_augmentation: false,
324 missing_value_handling: vec![
325 MissingValueMethod::MeanImputation,
326 MissingValueMethod::DropRows,
327 ],
328 }
329 }
330}
331
332impl Default for HyperparameterSearchSpace {
333 fn default() -> Self {
334 Self {
335 learning_rates: (0.001, 0.1),
336 regularization: (0.0, 0.1),
337 batch_sizes: vec![16, 32, 64, 128],
338 epochs: (10, 100),
339 quantum_params: QuantumHyperparameterSpace::default(),
340 }
341 }
342}
343
344impl Default for QuantumHyperparameterSpace {
345 fn default() -> Self {
346 Self {
347 num_qubits: (4, 16),
348 circuit_depth: (2, 10),
349 entanglement_strength: (0.0, 1.0),
350 variational_params: (-std::f64::consts::PI, std::f64::consts::PI),
351 measurement_strategies: vec!["all_qubits".to_string(), "partial".to_string()],
352 }
353 }
354}
355
356impl Default for ArchitectureSearchSpace {
357 fn default() -> Self {
358 Self {
359 network_architectures: vec![
360 NetworkArchitecture::MLP {
361 hidden_layers: vec![64, 32],
362 },
363 NetworkArchitecture::MLP {
364 hidden_layers: vec![128, 64, 32],
365 },
366 ],
367 quantum_architectures: vec![
368 QuantumArchitecture::VariationalCircuit {
369 layers: vec!["RY".to_string(), "CNOT".to_string()],
370 depth: 3,
371 },
372 QuantumArchitecture::HardwareEfficient {
373 connectivity: "linear".to_string(),
374 repetitions: 2,
375 },
376 ],
377 hybrid_architectures: true,
378 generation_strategy: ArchitectureGenerationStrategy::Random,
379 }
380 }
381}
382
383impl Default for EnsembleSearchSpace {
384 fn default() -> Self {
385 Self {
386 enabled: true,
387 max_ensemble_size: 5,
388 combination_methods: vec![
389 EnsembleCombinationMethod::Voting,
390 EnsembleCombinationMethod::Averaging,
391 ],
392 diversity_strategies: vec![
393 EnsembleDiversityStrategy::DifferentAlgorithms,
394 EnsembleDiversityStrategy::DifferentHyperparameters,
395 ],
396 }
397 }
398}
399
400impl SearchSpaceConfig {
402 pub fn comprehensive() -> Self {
404 Self {
405 algorithms: AlgorithmSearchSpace {
406 quantum_neural_networks: true,
407 quantum_svm: true,
408 quantum_clustering: true,
409 quantum_dim_reduction: true,
410 quantum_time_series: true,
411 quantum_anomaly_detection: true,
412 classical_algorithms: true,
413 },
414 preprocessing: PreprocessingSearchSpace {
415 scaling_methods: vec![
416 ScalingMethod::StandardScaler,
417 ScalingMethod::MinMaxScaler,
418 ScalingMethod::RobustScaler,
419 ScalingMethod::QuantileScaler,
420 ScalingMethod::QuantumScaler,
421 ScalingMethod::NoScaling,
422 ],
423 feature_selection: vec![
424 FeatureSelectionMethod::VarianceThreshold { threshold: 0.01 },
425 FeatureSelectionMethod::UnivariateSelection { k: 10 },
426 FeatureSelectionMethod::RecursiveFeatureElimination { n_features: 20 },
427 FeatureSelectionMethod::QuantumFeatureSelection {
428 method: "qpca".to_string(),
429 },
430 FeatureSelectionMethod::PrincipalComponentAnalysis { n_components: 10 },
431 FeatureSelectionMethod::QuantumPCA { n_components: 10 },
432 ],
433 quantum_encodings: vec![
434 QuantumEncodingMethod::AmplitudeEncoding,
435 QuantumEncodingMethod::AngleEncoding,
436 QuantumEncodingMethod::BasisEncoding,
437 QuantumEncodingMethod::VariationalEncoding { layers: 3 },
438 QuantumEncodingMethod::AutomaticEncoding,
439 ],
440 data_augmentation: true,
441 missing_value_handling: vec![
442 MissingValueMethod::MeanImputation,
443 MissingValueMethod::MedianImputation,
444 MissingValueMethod::QuantumImputation,
445 MissingValueMethod::KNNImputation { k: 5 },
446 ],
447 },
448 hyperparameters: HyperparameterSearchSpace {
449 learning_rates: (0.0001, 0.5),
450 regularization: (0.0, 0.5),
451 batch_sizes: vec![8, 16, 32, 64, 128, 256],
452 epochs: (5, 200),
453 quantum_params: QuantumHyperparameterSpace {
454 num_qubits: (2, 32),
455 circuit_depth: (1, 20),
456 entanglement_strength: (0.0, 1.0),
457 variational_params: (-2.0 * std::f64::consts::PI, 2.0 * std::f64::consts::PI),
458 measurement_strategies: vec![
459 "all_qubits".to_string(),
460 "partial".to_string(),
461 "adaptive".to_string(),
462 ],
463 },
464 },
465 architectures: ArchitectureSearchSpace {
466 network_architectures: vec![
467 NetworkArchitecture::MLP {
468 hidden_layers: vec![32],
469 },
470 NetworkArchitecture::MLP {
471 hidden_layers: vec![64, 32],
472 },
473 NetworkArchitecture::MLP {
474 hidden_layers: vec![128, 64, 32],
475 },
476 NetworkArchitecture::MLP {
477 hidden_layers: vec![256, 128, 64],
478 },
479 ],
480 quantum_architectures: vec![
481 QuantumArchitecture::VariationalCircuit {
482 layers: vec!["RY".to_string(), "CNOT".to_string()],
483 depth: 2,
484 },
485 QuantumArchitecture::VariationalCircuit {
486 layers: vec!["RX".to_string(), "RZ".to_string(), "CNOT".to_string()],
487 depth: 4,
488 },
489 QuantumArchitecture::HardwareEfficient {
490 connectivity: "linear".to_string(),
491 repetitions: 3,
492 },
493 QuantumArchitecture::HardwareEfficient {
494 connectivity: "circular".to_string(),
495 repetitions: 2,
496 },
497 ],
498 hybrid_architectures: true,
499 generation_strategy: ArchitectureGenerationStrategy::BayesianOptimization,
500 },
501 ensembles: EnsembleSearchSpace {
502 enabled: true,
503 max_ensemble_size: 10,
504 combination_methods: vec![
505 EnsembleCombinationMethod::Voting,
506 EnsembleCombinationMethod::Averaging,
507 EnsembleCombinationMethod::WeightedAveraging,
508 EnsembleCombinationMethod::Stacking,
509 EnsembleCombinationMethod::QuantumSuperposition,
510 ],
511 diversity_strategies: vec![
512 EnsembleDiversityStrategy::Bagging,
513 EnsembleDiversityStrategy::DifferentAlgorithms,
514 EnsembleDiversityStrategy::DifferentHyperparameters,
515 EnsembleDiversityStrategy::QuantumDiversity,
516 ],
517 },
518 }
519 }
520
521 pub fn production() -> Self {
523 Self {
524 algorithms: AlgorithmSearchSpace {
525 quantum_neural_networks: true,
526 quantum_svm: true,
527 quantum_clustering: false,
528 quantum_dim_reduction: false,
529 quantum_time_series: false,
530 quantum_anomaly_detection: false,
531 classical_algorithms: true,
532 },
533 preprocessing: PreprocessingSearchSpace {
534 scaling_methods: vec![
535 ScalingMethod::StandardScaler,
536 ScalingMethod::MinMaxScaler,
537 ScalingMethod::RobustScaler,
538 ],
539 feature_selection: vec![
540 FeatureSelectionMethod::VarianceThreshold { threshold: 0.01 },
541 FeatureSelectionMethod::UnivariateSelection { k: 15 },
542 ],
543 quantum_encodings: vec![
544 QuantumEncodingMethod::AngleEncoding,
545 QuantumEncodingMethod::AmplitudeEncoding,
546 ],
547 data_augmentation: false,
548 missing_value_handling: vec![
549 MissingValueMethod::MeanImputation,
550 MissingValueMethod::MedianImputation,
551 ],
552 },
553 hyperparameters: HyperparameterSearchSpace {
554 learning_rates: (0.001, 0.1),
555 regularization: (0.0, 0.1),
556 batch_sizes: vec![32, 64, 128],
557 epochs: (20, 100),
558 quantum_params: QuantumHyperparameterSpace {
559 num_qubits: (4, 20),
560 circuit_depth: (2, 8),
561 entanglement_strength: (0.1, 0.9),
562 variational_params: (-std::f64::consts::PI, std::f64::consts::PI),
563 measurement_strategies: vec!["all_qubits".to_string(), "partial".to_string()],
564 },
565 },
566 architectures: ArchitectureSearchSpace {
567 network_architectures: vec![
568 NetworkArchitecture::MLP {
569 hidden_layers: vec![64, 32],
570 },
571 NetworkArchitecture::MLP {
572 hidden_layers: vec![128, 64],
573 },
574 ],
575 quantum_architectures: vec![
576 QuantumArchitecture::VariationalCircuit {
577 layers: vec!["RY".to_string(), "CNOT".to_string()],
578 depth: 3,
579 },
580 QuantumArchitecture::HardwareEfficient {
581 connectivity: "linear".to_string(),
582 repetitions: 2,
583 },
584 ],
585 hybrid_architectures: true,
586 generation_strategy: ArchitectureGenerationStrategy::BayesianOptimization,
587 },
588 ensembles: EnsembleSearchSpace {
589 enabled: true,
590 max_ensemble_size: 5,
591 combination_methods: vec![
592 EnsembleCombinationMethod::Voting,
593 EnsembleCombinationMethod::WeightedAveraging,
594 ],
595 diversity_strategies: vec![
596 EnsembleDiversityStrategy::DifferentAlgorithms,
597 EnsembleDiversityStrategy::DifferentHyperparameters,
598 ],
599 },
600 }
601 }
602}