1use super::*;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct SciRS2MappingConfig {
8 pub initial_mapping_algorithm: InitialMappingAlgorithm,
10 pub routing_algorithm: SciRS2RoutingAlgorithm,
12 pub optimization_objective: OptimizationObjective,
14 pub community_method: CommunityMethod,
16 pub max_iterations: usize,
18 pub tolerance: f64,
20 pub enable_spectral_analysis: bool,
22 pub enable_centrality_optimization: bool,
24 pub enable_ml_predictions: bool,
26 pub parallel_config: ParallelConfig,
28 pub adaptive_config: AdaptiveMappingConfig,
30 pub ml_config: MLMappingConfig,
32 pub analytics_config: MappingAnalyticsConfig,
34 pub advanced_optimization: AdvancedOptimizationConfig,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct ParallelConfig {
41 pub num_threads: usize,
43 pub enable_parallel_analysis: bool,
45 pub enable_parallel_optimization: bool,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct AdaptiveMappingConfig {
52 pub enable_adaptation: bool,
54 pub adaptation_threshold: f64,
56 pub learning_rate: f64,
58 pub memory_size: usize,
60 pub feedback_method: FeedbackMethod,
62 pub online_learning: OnlineLearningConfig,
64}
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
68pub enum FeedbackMethod {
69 PerformanceBased,
70 ErrorRateBased,
71 LatencyBased,
72 QualityBased,
73 Hybrid,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct OnlineLearningConfig {
79 pub enabled: bool,
81 pub algorithm: OnlineLearningAlgorithm,
83 pub learning_rate: f64,
85 pub batch_size: usize,
87 pub replay_buffer_size: usize,
89}
90
91#[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![], 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}