Skip to main content

scirs2_stats/quantum_advanced/
quantumconfig_traits.rs

1//! # QuantumConfig - Trait Implementations
2//!
3//! This module contains trait implementations for `QuantumConfig`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Default`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use scirs2_core::numeric::{Float, NumCast, One, Zero};
12use scirs2_core::{parallel_ops::*, simd_ops::SimdUnifiedOps, validation::*};
13use std::collections::HashMap;
14
15use super::functions::const_f64;
16use super::types::{
17    AnnealingSchedule, BlockEncodingConfig, ClassicalOptimizer, ContractionStrategy,
18    DataEncodingMethod, DecoherenceConfig, EntanglementType, MeasurementStrategy, NoiseModel,
19    ParameterConfig, ParameterInitialization, QuantumAmplitudeEstimationConfig,
20    QuantumAnnealingConfig, QuantumClusteringAlgorithm, QuantumClusteringConfig, QuantumConfig,
21    QuantumFeatureMap, QuantumKernelType, QuantumLayerConfig, QuantumLayerType,
22    QuantumNeuralNetworkConfig, QuantumPCAConfig, QuantumSVMConfig, QuantumTrainingConfig,
23    RotationAxis, TensorNetworkConfig, TensorNetworkType, VQEAnsatz, VQEConfig,
24};
25
26impl<F> Default for QuantumConfig<F>
27where
28    F: Float + NumCast + Copy + std::fmt::Display,
29{
30    fn default() -> Self {
31        Self {
32            num_qubits: 10,
33            circuit_depth: 5,
34            qae_config: QuantumAmplitudeEstimationConfig {
35                evaluation_qubits: 3,
36                target_accuracy: const_f64::<F>(0.01),
37                max_iterations: 100,
38                use_mlae: true,
39                use_iqae: false,
40            },
41            qpca_config: QuantumPCAConfig {
42                num_components: 5,
43                matrix_exp_precision: const_f64::<F>(1e-6),
44                use_variational: true,
45                block_encoding: BlockEncodingConfig {
46                    precision: const_f64::<F>(1e-8),
47                    alpha: F::one(),
48                    ancilla_qubits: 2,
49                },
50            },
51            qsvm_config: QuantumSVMConfig {
52                kernel_type: QuantumKernelType::FidelityKernel,
53                feature_map: QuantumFeatureMap::ZZFeatureMap {
54                    repetitions: 2,
55                    entanglement: EntanglementType::Linear,
56                },
57                c_parameter: F::one(),
58                use_vqc: true,
59                ansatz_layers: 3,
60            },
61            qclustering_config: QuantumClusteringConfig {
62                algorithm: QuantumClusteringAlgorithm::QuantumKMeans,
63                num_clusters: 3,
64                annealing_config: QuantumAnnealingConfig {
65                    annealing_schedule: AnnealingSchedule::Linear {
66                        duration: const_f64::<F>(100.0),
67                    },
68                    num_runs: 100,
69                    temperature_range: (const_f64::<F>(0.01), const_f64::<F>(10.0)),
70                    use_simulated_fallback: true,
71                },
72                use_qaoa: false,
73            },
74            vqe_config: VQEConfig {
75                ansatz_type: VQEAnsatz::HardwareEfficient { layers: 3 },
76                optimizer: ClassicalOptimizer::COBYLA,
77                tolerance: const_f64::<F>(1e-6),
78                max_iterations: 1000,
79                measurement_shots: 1024,
80            },
81            tensor_network_config: TensorNetworkConfig {
82                network_type: TensorNetworkType::MPS,
83                max_bond_dim: 50,
84                truncation_threshold: const_f64::<F>(1e-12),
85                use_gpu: false,
86                contraction_strategy: ContractionStrategy::Optimal,
87            },
88            qnn_config: QuantumNeuralNetworkConfig {
89                quantum_layers: vec![QuantumLayerConfig {
90                    layer_type: QuantumLayerType::RotationLayer {
91                        axes: vec![RotationAxis::Y, RotationAxis::Z],
92                    },
93                    num_qubits: 4,
94                    parameters: ParameterConfig {
95                        num_parameters: 8,
96                        initialization: ParameterInitialization::Random,
97                        bounds: Some((-std::f64::consts::PI, std::f64::consts::PI)),
98                    },
99                }],
100                data_encoding: DataEncodingMethod::AngleEncoding,
101                measurement_strategy: MeasurementStrategy::PauliExpectation {
102                    operators: vec!["Z".to_string()],
103                },
104                classical_layers: vec![],
105                training_config: QuantumTrainingConfig {
106                    learning_rate: const_f64::<F>(0.01),
107                    epochs: 100,
108                    batchsize: 32,
109                    use_parameter_shift: true,
110                    regularization: const_f64::<F>(0.001),
111                },
112            },
113            noise_model: NoiseModel {
114                gate_errors: HashMap::new(),
115                decoherence_times: DecoherenceConfig {
116                    t1: const_f64::<F>(100.0),
117                    t2: const_f64::<F>(50.0),
118                    t2_star: const_f64::<F>(30.0),
119                },
120                readout_errors: const_f64::<F>(0.01),
121                enable_noise: false,
122            },
123        }
124    }
125}