quantrs2_device/mapping_scirs2/
config.rs

1//! Configuration types for SciRS2 mapping
2
3use super::*;
4
5/// Advanced mapping configuration using SciRS2
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct SciRS2MappingConfig {
8    /// Graph algorithm to use for initial mapping
9    pub initial_mapping_algorithm: InitialMappingAlgorithm,
10    /// Routing algorithm for dynamic remapping
11    pub routing_algorithm: SciRS2RoutingAlgorithm,
12    /// Optimization objective
13    pub optimization_objective: OptimizationObjective,
14    /// Community detection method for clustering
15    pub community_method: CommunityMethod,
16    /// Maximum optimization iterations
17    pub max_iterations: usize,
18    /// Convergence tolerance
19    pub tolerance: f64,
20    /// Enable spectral analysis
21    pub enable_spectral_analysis: bool,
22    /// Enable centrality-based optimization
23    pub enable_centrality_optimization: bool,
24    /// Enable machine learning predictions
25    pub enable_ml_predictions: bool,
26    /// Parallel processing options
27    pub parallel_config: ParallelConfig,
28    /// Real-time adaptive mapping configuration
29    pub adaptive_config: AdaptiveMappingConfig,
30    /// Machine learning configuration
31    pub ml_config: MLMappingConfig,
32    /// Performance analytics configuration
33    pub analytics_config: MappingAnalyticsConfig,
34    /// Advanced optimization configuration
35    pub advanced_optimization: AdvancedOptimizationConfig,
36}
37
38/// Parallel processing configuration
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct ParallelConfig {
41    /// Number of threads to use
42    pub num_threads: usize,
43    /// Enable parallel graph analysis
44    pub enable_parallel_analysis: bool,
45    /// Enable parallel optimization
46    pub enable_parallel_optimization: bool,
47}
48
49/// Adaptive mapping configuration
50#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct AdaptiveMappingConfig {
52    /// Enable real-time adaptation
53    pub enable_adaptation: bool,
54    /// Adaptation trigger threshold
55    pub adaptation_threshold: f64,
56    /// Learning rate for adaptation
57    pub learning_rate: f64,
58    /// Memory size for online learning
59    pub memory_size: usize,
60    /// Feedback method
61    pub feedback_method: FeedbackMethod,
62    /// Online learning configuration
63    pub online_learning: OnlineLearningConfig,
64}
65
66/// Feedback methods for adaptation
67#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
68pub enum FeedbackMethod {
69    PerformanceBased,
70    ErrorRateBased,
71    LatencyBased,
72    QualityBased,
73    Hybrid,
74}
75
76/// Online learning configuration
77#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct OnlineLearningConfig {
79    /// Enable online learning
80    pub enabled: bool,
81    /// Learning algorithm
82    pub algorithm: OnlineLearningAlgorithm,
83    /// Learning rate
84    pub learning_rate: f64,
85    /// Batch size for mini-batch learning
86    pub batch_size: usize,
87    /// Experience replay buffer size
88    pub replay_buffer_size: usize,
89}
90
91/// Online learning algorithms
92#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
93pub enum OnlineLearningAlgorithm {
94    StochasticGradientDescent,
95    AdaptiveGradient,
96    RMSProp,
97    Adam,
98    OnlineRandomForest,
99    IncrementalSVM,
100    ReinforcementLearning,
101}
102
103impl Default for SciRS2MappingConfig {
104    fn default() -> Self {
105        Self {
106            initial_mapping_algorithm: InitialMappingAlgorithm::SpectralEmbedding,
107            routing_algorithm: SciRS2RoutingAlgorithm::AStarEnhanced,
108            optimization_objective: OptimizationObjective::MinimizeSwaps,
109            community_method: CommunityMethod::Louvain,
110            max_iterations: 1000,
111            tolerance: 1e-6,
112            enable_spectral_analysis: true,
113            enable_centrality_optimization: true,
114            enable_ml_predictions: true,
115            parallel_config: ParallelConfig {
116                num_threads: num_cpus::get(),
117                enable_parallel_analysis: true,
118                enable_parallel_optimization: true,
119            },
120            adaptive_config: AdaptiveMappingConfig {
121                enable_adaptation: true,
122                adaptation_threshold: 0.1,
123                learning_rate: 0.01,
124                memory_size: 1000,
125                feedback_method: FeedbackMethod::PerformanceBased,
126                online_learning: OnlineLearningConfig {
127                    enabled: true,
128                    algorithm: OnlineLearningAlgorithm::Adam,
129                    learning_rate: 0.001,
130                    batch_size: 32,
131                    replay_buffer_size: 10000,
132                },
133            },
134            ml_config: MLMappingConfig {
135                enable_ml: true,
136                model_types: vec![], // Use empty for now
137                feature_config: FeatureConfig {
138                    enable_structural: true,
139                    enable_temporal: true,
140                    enable_hardware: true,
141                    enable_circuit: true,
142                    selection_method: FeatureSelectionMethod::VarianceThreshold { threshold: 0.01 },
143                    max_features: 100,
144                },
145                training_config: TrainingConfig {
146                    batch_size: 64,
147                    epochs: 100,
148                    learning_rate: 0.001,
149                    validation_split: 0.2,
150                    early_stopping_patience: 10,
151                    regularization: RegularizationParams {
152                        l1_lambda: 0.01,
153                        l2_lambda: 0.01,
154                        dropout: 0.5,
155                        batch_norm: true,
156                    },
157                },
158                prediction_config: PredictionConfig {
159                    ensemble_size: 5,
160                    confidence_threshold: 0.8,
161                    use_uncertainty_estimation: true,
162                    monte_carlo_samples: 100,
163                    temperature_scaling: false,
164                    calibration_method: CalibrationMethod::PlattScaling,
165                },
166                transfer_learning: TransferLearningConfig {
167                    enable_transfer: true,
168                    source_domains: vec!["general_circuits".to_string()],
169                    adaptation_method: DomainAdaptationMethod::FineTuning,
170                    fine_tuning: FineTuningConfig {
171                        freeze_layers: vec![0, 1],
172                        unfreeze_after_epochs: 20,
173                        reduced_learning_rate: 0.0001,
174                    },
175                },
176            },
177            analytics_config: MappingAnalyticsConfig {
178                enable_analytics: true,
179                tracking_level: AnalysisDepth::Comprehensive,
180                metrics_to_track: vec![
181                    TrackingMetric::ExecutionTime,
182                    TrackingMetric::MemoryUsage,
183                    TrackingMetric::MappingQuality,
184                    TrackingMetric::SwapCount,
185                    TrackingMetric::FidelityLoss,
186                ],
187                anomaly_detection: AnomalyDetectionConfig {
188                    enable_detection: true,
189                    detection_method: AnomalyDetectionMethod::IsolationForest,
190                    threshold: 0.1,
191                    window_size: 100,
192                },
193                alerting: AlertConfig {
194                    enable_alerts: true,
195                    severity_threshold: 0.5,
196                    notification_methods: vec![NotificationMethod::Log],
197                    cooldown_period: Duration::from_secs(300),
198                },
199                reporting: ReportingConfig {
200                    enable_reporting: true,
201                    report_frequency: Duration::from_secs(3600),
202                    report_format: ReportFormat::JSON,
203                    content_config: ReportContentConfig {
204                        include_performance_metrics: true,
205                        include_trend_analysis: true,
206                        include_recommendations: true,
207                        include_visualizations: false,
208                    },
209                },
210            },
211            advanced_optimization: AdvancedOptimizationConfig {
212                enable_advanced: true,
213                multi_objective: MultiObjectiveConfig {
214                    enable_multi_objective: true,
215                    objectives: vec![
216                        OptimizationObjective::MinimizeSwaps,
217                        OptimizationObjective::MinimizeDepth,
218                        OptimizationObjective::MaximizeFidelity,
219                    ],
220                    pareto_config: ParetoConfig {
221                        population_size: 100,
222                        generations: 50,
223                        crossover_rate: 0.8,
224                        mutation_rate: 0.1,
225                        selection_method: SelectionMethod::Tournament { size: 3 },
226                        scalarization: ScalarizationMethod::WeightedSum {
227                            weights: vec![0.4, 0.3, 0.3],
228                        },
229                    },
230                },
231                constraint_handling: ConstraintHandlingConfig {
232                    enable_constraints: true,
233                    constraint_types: vec![
234                        ConstraintType::ConnectivityConstraint,
235                        ConstraintType::TimingConstraint,
236                        ConstraintType::ResourceConstraint,
237                    ],
238                    penalty_method: PenaltyMethod::AdaptivePenalty {
239                        initial_penalty: 1.0,
240                    },
241                    tolerance: 1e-6,
242                },
243                search_strategy: SearchStrategyConfig {
244                    strategy: SearchStrategy::HybridSearch,
245                    hybrid_config: HybridSearchConfig {
246                        strategies: vec![
247                            SearchStrategy::GeneticAlgorithm,
248                            SearchStrategy::SimulatedAnnealing,
249                            SearchStrategy::ParticleSwarm,
250                        ],
251                        switching_criteria: SwitchingCriteria {
252                            performance_threshold: 0.05,
253                            stagnation_limit: 50,
254                            time_limit: Duration::from_secs(300),
255                        },
256                    },
257                    budget: SearchBudgetConfig {
258                        max_evaluations: 10000,
259                        max_time: Duration::from_secs(600),
260                        target_quality: 0.95,
261                    },
262                },
263                parallel_optimization: ParallelOptimizationConfig {
264                    enable_parallel: true,
265                    num_workers: num_cpus::get(),
266                    load_balancing: LoadBalancingStrategy::RoundRobin,
267                    synchronization: SynchronizationMethod::Asynchronous,
268                },
269            },
270        }
271    }
272}