use super::*;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SciRS2MappingConfig {
pub initial_mapping_algorithm: InitialMappingAlgorithm,
pub routing_algorithm: SciRS2RoutingAlgorithm,
pub optimization_objective: OptimizationObjective,
pub community_method: CommunityMethod,
pub max_iterations: usize,
pub tolerance: f64,
pub enable_spectral_analysis: bool,
pub enable_centrality_optimization: bool,
pub enable_ml_predictions: bool,
pub parallel_config: ParallelConfig,
pub adaptive_config: AdaptiveMappingConfig,
pub ml_config: MLMappingConfig,
pub analytics_config: MappingAnalyticsConfig,
pub advanced_optimization: AdvancedOptimizationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParallelConfig {
pub num_threads: usize,
pub enable_parallel_analysis: bool,
pub enable_parallel_optimization: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdaptiveMappingConfig {
pub enable_adaptation: bool,
pub adaptation_threshold: f64,
pub learning_rate: f64,
pub memory_size: usize,
pub feedback_method: FeedbackMethod,
pub online_learning: OnlineLearningConfig,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum FeedbackMethod {
PerformanceBased,
ErrorRateBased,
LatencyBased,
QualityBased,
Hybrid,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OnlineLearningConfig {
pub enabled: bool,
pub algorithm: OnlineLearningAlgorithm,
pub learning_rate: f64,
pub batch_size: usize,
pub replay_buffer_size: usize,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum OnlineLearningAlgorithm {
StochasticGradientDescent,
AdaptiveGradient,
RMSProp,
Adam,
OnlineRandomForest,
IncrementalSVM,
ReinforcementLearning,
}
impl Default for SciRS2MappingConfig {
fn default() -> Self {
Self {
initial_mapping_algorithm: InitialMappingAlgorithm::SpectralEmbedding,
routing_algorithm: SciRS2RoutingAlgorithm::AStarEnhanced,
optimization_objective: OptimizationObjective::MinimizeSwaps,
community_method: CommunityMethod::Louvain,
max_iterations: 1000,
tolerance: 1e-6,
enable_spectral_analysis: true,
enable_centrality_optimization: true,
enable_ml_predictions: true,
parallel_config: ParallelConfig {
num_threads: num_cpus::get(),
enable_parallel_analysis: true,
enable_parallel_optimization: true,
},
adaptive_config: AdaptiveMappingConfig {
enable_adaptation: true,
adaptation_threshold: 0.1,
learning_rate: 0.01,
memory_size: 1000,
feedback_method: FeedbackMethod::PerformanceBased,
online_learning: OnlineLearningConfig {
enabled: true,
algorithm: OnlineLearningAlgorithm::Adam,
learning_rate: 0.001,
batch_size: 32,
replay_buffer_size: 10000,
},
},
ml_config: MLMappingConfig {
enable_ml: true,
model_types: vec![], feature_config: FeatureConfig {
enable_structural: true,
enable_temporal: true,
enable_hardware: true,
enable_circuit: true,
selection_method: FeatureSelectionMethod::VarianceThreshold { threshold: 0.01 },
max_features: 100,
},
training_config: TrainingConfig {
batch_size: 64,
epochs: 100,
learning_rate: 0.001,
validation_split: 0.2,
early_stopping_patience: 10,
regularization: RegularizationParams {
l1_lambda: 0.01,
l2_lambda: 0.01,
dropout: 0.5,
batch_norm: true,
},
},
prediction_config: PredictionConfig {
ensemble_size: 5,
confidence_threshold: 0.8,
use_uncertainty_estimation: true,
monte_carlo_samples: 100,
temperature_scaling: false,
calibration_method: CalibrationMethod::PlattScaling,
},
transfer_learning: TransferLearningConfig {
enable_transfer: true,
source_domains: vec!["general_circuits".to_string()],
adaptation_method: DomainAdaptationMethod::FineTuning,
fine_tuning: FineTuningConfig {
freeze_layers: vec![0, 1],
unfreeze_after_epochs: 20,
reduced_learning_rate: 0.0001,
},
},
},
analytics_config: MappingAnalyticsConfig {
enable_analytics: true,
tracking_level: AnalysisDepth::Comprehensive,
metrics_to_track: vec![
TrackingMetric::ExecutionTime,
TrackingMetric::MemoryUsage,
TrackingMetric::MappingQuality,
TrackingMetric::SwapCount,
TrackingMetric::FidelityLoss,
],
anomaly_detection: AnomalyDetectionConfig {
enable_detection: true,
detection_method: AnomalyDetectionMethod::IsolationForest,
threshold: 0.1,
window_size: 100,
},
alerting: AlertConfig {
enable_alerts: true,
severity_threshold: 0.5,
notification_methods: vec![NotificationMethod::Log],
cooldown_period: Duration::from_secs(300),
},
reporting: ReportingConfig {
enable_reporting: true,
report_frequency: Duration::from_secs(3600),
report_format: ReportFormat::JSON,
content_config: ReportContentConfig {
include_performance_metrics: true,
include_trend_analysis: true,
include_recommendations: true,
include_visualizations: false,
},
},
},
advanced_optimization: AdvancedOptimizationConfig {
enable_advanced: true,
multi_objective: MultiObjectiveConfig {
enable_multi_objective: true,
objectives: vec![
OptimizationObjective::MinimizeSwaps,
OptimizationObjective::MinimizeDepth,
OptimizationObjective::MaximizeFidelity,
],
pareto_config: ParetoConfig {
population_size: 100,
generations: 50,
crossover_rate: 0.8,
mutation_rate: 0.1,
selection_method: SelectionMethod::Tournament { size: 3 },
scalarization: ScalarizationMethod::WeightedSum {
weights: vec![0.4, 0.3, 0.3],
},
},
},
constraint_handling: ConstraintHandlingConfig {
enable_constraints: true,
constraint_types: vec![
ConstraintType::ConnectivityConstraint,
ConstraintType::TimingConstraint,
ConstraintType::ResourceConstraint,
],
penalty_method: PenaltyMethod::AdaptivePenalty {
initial_penalty: 1.0,
},
tolerance: 1e-6,
},
search_strategy: SearchStrategyConfig {
strategy: SearchStrategy::HybridSearch,
hybrid_config: HybridSearchConfig {
strategies: vec![
SearchStrategy::GeneticAlgorithm,
SearchStrategy::SimulatedAnnealing,
SearchStrategy::ParticleSwarm,
],
switching_criteria: SwitchingCriteria {
performance_threshold: 0.05,
stagnation_limit: 50,
time_limit: Duration::from_secs(300),
},
},
budget: SearchBudgetConfig {
max_evaluations: 10000,
max_time: Duration::from_secs(600),
target_quality: 0.95,
},
},
parallel_optimization: ParallelOptimizationConfig {
enable_parallel: true,
num_workers: num_cpus::get(),
load_balancing: LoadBalancingStrategy::RoundRobin,
synchronization: SynchronizationMethod::Asynchronous,
},
},
}
}
}