use std::collections::HashMap;
use std::time::Duration;
use super::hardware_adaptation::*;
use super::ml_integration::*;
use super::monitoring::*;
use super::strategies::*;
#[derive(Debug, Clone, Default)]
pub struct AdaptiveCompilationConfig {
pub realtime_optimization: RealtimeOptimizationConfig,
pub adaptive_strategies: AdaptiveStrategiesConfig,
pub performance_monitoring: PerformanceMonitoringConfig,
pub ml_optimization: MLOptimizationConfig,
pub circuit_analysis: CircuitAnalysisConfig,
pub hardware_adaptation: HardwareAdaptationConfig,
pub optimization_objectives: OptimizationObjectivesConfig,
pub caching_learning: CachingLearningConfig,
}
#[derive(Debug, Clone)]
pub struct RealtimeOptimizationConfig {
pub enable_realtime: bool,
pub update_interval: Duration,
pub performance_threshold: f64,
pub max_optimization_time: Duration,
pub optimization_algorithms: Vec<OptimizationAlgorithm>,
pub parallel_optimization: ParallelOptimizationConfig,
pub adaptive_algorithm_selection: bool,
}
#[derive(Debug, Clone)]
pub struct OptimizationObjectivesConfig {
pub primary_objectives: HashMap<String, f64>,
pub secondary_objectives: HashMap<String, f64>,
pub constraints: Vec<OptimizationConstraint>,
pub multi_objective: MultiObjectiveConfig,
pub dynamic_weighting: DynamicWeightingConfig,
}
#[derive(Debug, Clone)]
pub struct CachingLearningConfig {
pub enable_caching: bool,
pub cache_size_limits: CacheSizeLimits,
pub eviction_policies: EvictionPolicies,
pub cache_learning: CacheLearningConfig,
pub distributed_caching: DistributedCachingConfig,
}
#[derive(Debug, Clone)]
pub struct OptimizationConstraint {
pub name: String,
pub constraint_type: ConstraintType,
pub value: f64,
pub priority: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ConstraintType {
MaxExecutionTime,
MinFidelity,
MaxResourceUsage,
MaxCircuitDepth,
MaxGateCount,
EnergyBudget,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct MultiObjectiveConfig {
pub enable_multi_objective: bool,
pub pareto_exploration: ParetoExplorationConfig,
pub trade_off_strategies: Vec<TradeOffStrategy>,
pub ranking_method: RankingMethod,
}
#[derive(Debug, Clone)]
pub struct ParetoExplorationConfig {
pub solution_count: usize,
pub diversity_preservation: bool,
pub convergence_criteria: ConvergenceCriteria,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TradeOffStrategy {
WeightedSum,
EpsilonConstraint,
Lexicographic,
GoalProgramming,
NSGA2,
MOEA,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RankingMethod {
Dominance,
TOPSIS,
WeightedSum,
Utility,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct ConvergenceCriteria {
pub max_iterations: usize,
pub improvement_threshold: f64,
pub stagnation_tolerance: usize,
pub time_limit: Duration,
}
#[derive(Debug, Clone)]
pub struct DynamicWeightingConfig {
pub enable_dynamic: bool,
pub adaptation_strategy: WeightingStrategy,
pub update_frequency: Duration,
pub historical_influence: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum WeightingStrategy {
PerformanceBased,
AdaptiveBayesian,
ReinforcementLearning,
GradientBased,
Evolutionary,
}
#[derive(Debug, Clone)]
pub struct CacheSizeLimits {
pub circuit_cache_size: usize,
pub optimization_cache_size: usize,
pub performance_cache_size: usize,
pub memory_limit_mb: usize,
}
#[derive(Debug, Clone)]
pub struct EvictionPolicies {
pub circuit_cache_policy: EvictionPolicy,
pub optimization_cache_policy: EvictionPolicy,
pub performance_cache_policy: EvictionPolicy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EvictionPolicy {
LRU,
LFU,
PerformanceBased,
AgeBased,
SizeBased,
Hybrid,
}
#[derive(Debug, Clone)]
pub struct CacheLearningConfig {
pub enable_cache_learning: bool,
pub pattern_recognition: bool,
pub predictive_precaching: bool,
pub cache_hit_prediction: bool,
}
#[derive(Debug, Clone)]
pub struct DistributedCachingConfig {
pub enable_distributed: bool,
pub consistency_model: ConsistencyModel,
pub replication_factor: usize,
pub synchronization_strategy: SynchronizationStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ConsistencyModel {
StrongConsistency,
EventualConsistency,
WeakConsistency,
SessionConsistency,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SynchronizationStrategy {
Immediate,
Batch,
LazyPropagation,
ConflictFree,
}
impl Default for RealtimeOptimizationConfig {
fn default() -> Self {
Self {
enable_realtime: true,
update_interval: Duration::from_millis(100),
performance_threshold: 0.95,
max_optimization_time: Duration::from_secs(30),
optimization_algorithms: vec![
OptimizationAlgorithm::GradientDescent,
OptimizationAlgorithm::BayesianOptimization,
],
parallel_optimization: ParallelOptimizationConfig::default(),
adaptive_algorithm_selection: true,
}
}
}
impl Default for OptimizationObjectivesConfig {
fn default() -> Self {
let mut primary_objectives = HashMap::new();
primary_objectives.insert("fidelity".to_string(), 0.6);
primary_objectives.insert("execution_time".to_string(), 0.4);
Self {
primary_objectives,
secondary_objectives: HashMap::new(),
constraints: vec![],
multi_objective: MultiObjectiveConfig::default(),
dynamic_weighting: DynamicWeightingConfig::default(),
}
}
}
impl Default for CachingLearningConfig {
fn default() -> Self {
Self {
enable_caching: true,
cache_size_limits: CacheSizeLimits::default(),
eviction_policies: EvictionPolicies::default(),
cache_learning: CacheLearningConfig::default(),
distributed_caching: DistributedCachingConfig::default(),
}
}
}
impl Default for MultiObjectiveConfig {
fn default() -> Self {
Self {
enable_multi_objective: true,
pareto_exploration: ParetoExplorationConfig::default(),
trade_off_strategies: vec![TradeOffStrategy::NSGA2],
ranking_method: RankingMethod::Dominance,
}
}
}
impl Default for ParetoExplorationConfig {
fn default() -> Self {
Self {
solution_count: 50,
diversity_preservation: true,
convergence_criteria: ConvergenceCriteria::default(),
}
}
}
impl Default for ConvergenceCriteria {
fn default() -> Self {
Self {
max_iterations: 1000,
improvement_threshold: 1e-6,
stagnation_tolerance: 50,
time_limit: Duration::from_secs(300),
}
}
}
impl Default for DynamicWeightingConfig {
fn default() -> Self {
Self {
enable_dynamic: true,
adaptation_strategy: WeightingStrategy::PerformanceBased,
update_frequency: Duration::from_secs(60),
historical_influence: 0.3,
}
}
}
impl Default for CacheSizeLimits {
fn default() -> Self {
Self {
circuit_cache_size: 1000,
optimization_cache_size: 500,
performance_cache_size: 2000,
memory_limit_mb: 1024,
}
}
}
impl Default for EvictionPolicies {
fn default() -> Self {
Self {
circuit_cache_policy: EvictionPolicy::PerformanceBased,
optimization_cache_policy: EvictionPolicy::LRU,
performance_cache_policy: EvictionPolicy::LFU,
}
}
}
impl Default for CacheLearningConfig {
fn default() -> Self {
Self {
enable_cache_learning: true,
pattern_recognition: true,
predictive_precaching: true,
cache_hit_prediction: true,
}
}
}
impl Default for DistributedCachingConfig {
fn default() -> Self {
Self {
enable_distributed: false,
consistency_model: ConsistencyModel::EventualConsistency,
replication_factor: 3,
synchronization_strategy: SynchronizationStrategy::Batch,
}
}
}