use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnhancedHybridConfig {
pub base_config: HybridAlgorithmConfig,
pub enable_ml_optimization: bool,
pub enable_adaptive_learning: bool,
pub enable_realtime_tuning: bool,
pub enable_benchmarking: bool,
pub enable_distributed: bool,
pub enable_visual_analytics: bool,
pub algorithm_variants: Vec<HybridAlgorithm>,
pub optimization_strategies: Vec<OptimizationStrategy>,
pub performance_targets: PerformanceTargets,
pub analysis_options: HybridAnalysisOptions,
}
impl Default for EnhancedHybridConfig {
fn default() -> Self {
Self {
base_config: HybridAlgorithmConfig::default(),
enable_ml_optimization: true,
enable_adaptive_learning: true,
enable_realtime_tuning: true,
enable_benchmarking: true,
enable_distributed: true,
enable_visual_analytics: true,
algorithm_variants: vec![
HybridAlgorithm::VQE,
HybridAlgorithm::QAOA,
HybridAlgorithm::VQC,
],
optimization_strategies: vec![
OptimizationStrategy::AdaptiveGradient,
OptimizationStrategy::NaturalGradient,
OptimizationStrategy::QuantumNaturalGradient,
],
performance_targets: PerformanceTargets::default(),
analysis_options: HybridAnalysisOptions::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HybridAlgorithmConfig {
pub max_iterations: usize,
pub convergence_threshold: f64,
pub learning_rate: f64,
pub num_shots: usize,
pub batch_size: usize,
pub gradient_method: GradientMethod,
pub optimizer_type: OptimizerType,
pub hardware_backend: HardwareBackend,
}
impl Default for HybridAlgorithmConfig {
fn default() -> Self {
Self {
max_iterations: 1000,
convergence_threshold: 1e-6,
learning_rate: 0.1,
num_shots: 10000,
batch_size: 10,
gradient_method: GradientMethod::ParameterShift,
optimizer_type: OptimizerType::Adam,
hardware_backend: HardwareBackend::Simulator,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum HybridAlgorithm {
VQE, QAOA, VQC, QNN, QGAN, VQA, ADAPT, QuantumRL, }
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum OptimizationStrategy {
StandardGradient,
AdaptiveGradient,
NaturalGradient,
QuantumNaturalGradient,
SPSA, COBYLA, NelderMead,
Bayesian,
EvolutionaryStrategies,
ReinforcementLearning,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum GradientMethod {
FiniteDifference,
ParameterShift,
HadamardTest,
DirectMeasurement,
MLEstimation,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum OptimizerType {
GradientDescent,
Adam,
RMSprop,
AdaGrad,
LBFGS,
Newton,
TrustRegion,
Custom,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum HardwareBackend {
Simulator,
IBMQ,
IonQ,
Rigetti,
AzureQuantum,
AmazonBraket,
Custom,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceTargets {
pub target_accuracy: f64,
pub max_runtime: Duration,
pub max_circuit_evaluations: usize,
pub min_convergence_rate: f64,
pub resource_budget: ResourceBudget,
}
impl Default for PerformanceTargets {
fn default() -> Self {
Self {
target_accuracy: 0.999,
max_runtime: Duration::from_secs(3600),
max_circuit_evaluations: 100000,
min_convergence_rate: 0.001,
resource_budget: ResourceBudget::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceBudget {
pub max_qubits: usize,
pub max_gates: usize,
pub max_depth: usize,
pub max_cost: f64,
}
impl Default for ResourceBudget {
fn default() -> Self {
Self {
max_qubits: 100,
max_gates: 10000,
max_depth: 1000,
max_cost: 1000.0,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HybridAnalysisOptions {
pub track_convergence: bool,
pub analyze_landscape: bool,
pub detect_barren_plateaus: bool,
pub monitor_entanglement: bool,
pub profile_performance: bool,
pub validate_gradients: bool,
}
impl Default for HybridAnalysisOptions {
fn default() -> Self {
Self {
track_convergence: true,
analyze_landscape: true,
detect_barren_plateaus: true,
monitor_entanglement: true,
profile_performance: true,
validate_gradients: true,
}
}
}