use std::time::Duration;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OptimizationAlgorithm {
GradientDescent,
LBFGS,
DifferentialEvolution,
GeneticAlgorithm,
ParticleSwarm,
SimulatedAnnealing,
BayesianOptimization,
ReinforcementLearning,
QuantumApproximateOptimization,
HybridClassicalQuantum,
}
#[derive(Debug, Clone)]
pub struct AdaptiveStrategiesConfig {
pub enable_adaptive_circuits: bool,
pub enable_adaptive_resources: bool,
pub enable_adaptive_error_mitigation: bool,
pub enable_adaptive_scheduling: bool,
pub adaptation_triggers: Vec<AdaptationTrigger>,
pub adaptation_learning_rate: f64,
pub exploration_exploitation_balance: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AdaptationTrigger {
PerformanceDegradation,
TimeInterval,
ErrorRateIncrease,
ResourceConstraintViolation,
UserRequest,
AutomaticDetection,
}
#[derive(Debug, Clone)]
pub struct ParallelOptimizationConfig {
pub enable_parallel: bool,
pub max_parallel_jobs: usize,
pub load_balancing_strategy: LoadBalancingStrategy,
pub resource_allocation: ResourceAllocationStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LoadBalancingStrategy {
RoundRobin,
LeastLoaded,
PerformanceBased,
PredictiveBased,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ResourceAllocationStrategy {
Static,
Dynamic,
PredictiveBased,
LoadAware,
CapacityBased,
}
#[derive(Debug, Clone)]
pub struct CircuitAnalysisConfig {
pub enable_analysis: bool,
pub analysis_depth: AnalysisDepth,
pub complexity_analysis: ComplexityAnalysisConfig,
pub structure_analysis: StructureAnalysisConfig,
pub optimization_potential: OptimizationPotentialConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AnalysisDepth {
Basic,
Intermediate,
Comprehensive,
ExhaustiveSearch,
}
#[derive(Debug, Clone)]
pub struct ComplexityAnalysisConfig {
pub complexity_metrics: Vec<ComplexityMetric>,
pub enable_parallel_analysis: bool,
pub analysis_timeout: Duration,
pub resource_limits: AnalysisResourceLimits,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ComplexityMetric {
CircuitDepth,
GateCount,
TwoQubitGateCount,
ParameterCount,
ConnectivityComplexity,
EntanglementComplexity,
ComputationalComplexity,
SimulationComplexity,
}
#[derive(Debug, Clone)]
pub struct StructureAnalysisConfig {
pub pattern_recognition: bool,
pub symmetry_detection: bool,
pub subcircuit_identification: bool,
pub critical_path_analysis: bool,
}
#[derive(Debug, Clone)]
pub struct OptimizationPotentialConfig {
pub potential_metrics: Vec<PotentialMetric>,
pub opportunity_detection: bool,
pub bottleneck_identification: bool,
pub resource_utilization_analysis: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PotentialMetric {
GateReduction,
DepthReduction,
ParallelizationOpportunity,
ResourceOptimization,
ErrorMitigationPotential,
ExecutionTimeImprovement,
}
#[derive(Debug, Clone)]
pub struct AnalysisResourceLimits {
pub max_memory_mb: usize,
pub max_cpu_time: Duration,
pub max_threads: usize,
}
impl Default for AdaptiveStrategiesConfig {
fn default() -> Self {
Self {
enable_adaptive_circuits: true,
enable_adaptive_resources: true,
enable_adaptive_error_mitigation: true,
enable_adaptive_scheduling: true,
adaptation_triggers: vec![
AdaptationTrigger::PerformanceDegradation,
AdaptationTrigger::TimeInterval,
AdaptationTrigger::AutomaticDetection,
],
adaptation_learning_rate: 0.01,
exploration_exploitation_balance: 0.1,
}
}
}
impl Default for ParallelOptimizationConfig {
fn default() -> Self {
Self {
enable_parallel: true,
max_parallel_jobs: 4,
load_balancing_strategy: LoadBalancingStrategy::PerformanceBased,
resource_allocation: ResourceAllocationStrategy::Dynamic,
}
}
}
impl Default for CircuitAnalysisConfig {
fn default() -> Self {
Self {
enable_analysis: true,
analysis_depth: AnalysisDepth::Intermediate,
complexity_analysis: ComplexityAnalysisConfig::default(),
structure_analysis: StructureAnalysisConfig::default(),
optimization_potential: OptimizationPotentialConfig::default(),
}
}
}
impl Default for ComplexityAnalysisConfig {
fn default() -> Self {
Self {
complexity_metrics: vec![
ComplexityMetric::CircuitDepth,
ComplexityMetric::GateCount,
ComplexityMetric::TwoQubitGateCount,
ComplexityMetric::ConnectivityComplexity,
],
enable_parallel_analysis: true,
analysis_timeout: Duration::from_secs(60),
resource_limits: AnalysisResourceLimits::default(),
}
}
}
impl Default for StructureAnalysisConfig {
fn default() -> Self {
Self {
pattern_recognition: true,
symmetry_detection: true,
subcircuit_identification: true,
critical_path_analysis: true,
}
}
}
impl Default for OptimizationPotentialConfig {
fn default() -> Self {
Self {
potential_metrics: vec![
PotentialMetric::GateReduction,
PotentialMetric::DepthReduction,
PotentialMetric::ParallelizationOpportunity,
],
opportunity_detection: true,
bottleneck_identification: true,
resource_utilization_analysis: true,
}
}
}
impl Default for AnalysisResourceLimits {
fn default() -> Self {
Self {
max_memory_mb: 2048,
max_cpu_time: Duration::from_secs(300),
max_threads: 8,
}
}
}