scirs2_stats/quantum_advanced/
quantumconfig_traits.rs1use 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}