quantrs2_sim/quantum_reservoir_computing_enhanced/
config.rs1use serde::{Deserialize, Serialize};
6
7use super::types::{
8 ActivationFunction, IPCFunction, InputEncoding, LearningAlgorithm, MemoryKernel, MemoryTask,
9 OutputMeasurement, QuantumReservoirArchitecture, ReservoirDynamics,
10};
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct QuantumReservoirConfig {
15 pub num_qubits: usize,
17 pub architecture: QuantumReservoirArchitecture,
19 pub dynamics: ReservoirDynamics,
21 pub input_encoding: InputEncoding,
23 pub output_measurement: OutputMeasurement,
25 pub learning_config: AdvancedLearningConfig,
27 pub time_series_config: TimeSeriesConfig,
29 pub memory_config: MemoryAnalysisConfig,
31 pub time_step: f64,
33 pub evolution_steps: usize,
35 pub coupling_strength: f64,
37 pub noise_level: f64,
39 pub memory_capacity: usize,
41 pub adaptive_learning: bool,
43 pub learning_rate: f64,
45 pub washout_period: usize,
47 pub random_seed: Option<u64>,
49 pub enable_qec: bool,
51 pub precision: f64,
53}
54
55impl Default for QuantumReservoirConfig {
56 fn default() -> Self {
57 Self {
58 num_qubits: 8,
59 architecture: QuantumReservoirArchitecture::RandomCircuit,
60 dynamics: ReservoirDynamics::Unitary,
61 input_encoding: InputEncoding::Amplitude,
62 output_measurement: OutputMeasurement::PauliExpectation,
63 learning_config: AdvancedLearningConfig::default(),
64 time_series_config: TimeSeriesConfig::default(),
65 memory_config: MemoryAnalysisConfig::default(),
66 time_step: 0.1,
67 evolution_steps: 10,
68 coupling_strength: 1.0,
69 noise_level: 0.01,
70 memory_capacity: 100,
71 adaptive_learning: true,
72 learning_rate: 0.01,
73 washout_period: 50,
74 random_seed: None,
75 enable_qec: false,
76 precision: 1e-8,
77 }
78 }
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct AdvancedLearningConfig {
84 pub algorithm: LearningAlgorithm,
86 pub regularization: f64,
88 pub l1_ratio: f64,
90 pub forgetting_factor: f64,
92 pub process_noise: f64,
94 pub measurement_noise: f64,
96 pub nn_architecture: Vec<usize>,
98 pub nn_activation: ActivationFunction,
100 pub epochs: usize,
102 pub batch_size: usize,
104 pub early_stopping_patience: usize,
106 pub cv_folds: usize,
108 pub enable_ensemble: bool,
110 pub ensemble_size: usize,
112}
113
114impl Default for AdvancedLearningConfig {
115 fn default() -> Self {
116 Self {
117 algorithm: LearningAlgorithm::Ridge,
118 regularization: 1e-6,
119 l1_ratio: 0.5,
120 forgetting_factor: 0.99,
121 process_noise: 1e-4,
122 measurement_noise: 1e-3,
123 nn_architecture: vec![64, 32, 16],
124 nn_activation: ActivationFunction::ReLU,
125 epochs: 100,
126 batch_size: 32,
127 early_stopping_patience: 10,
128 cv_folds: 5,
129 enable_ensemble: false,
130 ensemble_size: 5,
131 }
132 }
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize)]
137pub struct TimeSeriesConfig {
138 pub enable_arima: bool,
140 pub ar_order: usize,
142 pub ma_order: usize,
144 pub diff_order: usize,
146 pub enable_nar: bool,
148 pub nar_order: usize,
150 pub memory_kernel: MemoryKernel,
152 pub kernel_params: Vec<f64>,
154 pub enable_seasonal: bool,
156 pub seasonal_period: usize,
158 pub enable_changepoint: bool,
160 pub anomaly_threshold: f64,
162}
163
164impl Default for TimeSeriesConfig {
165 fn default() -> Self {
166 Self {
167 enable_arima: true,
168 ar_order: 2,
169 ma_order: 1,
170 diff_order: 1,
171 enable_nar: true,
172 nar_order: 3,
173 memory_kernel: MemoryKernel::Exponential,
174 kernel_params: vec![0.9, 0.1],
175 enable_seasonal: false,
176 seasonal_period: 12,
177 enable_changepoint: false,
178 anomaly_threshold: 2.0,
179 }
180 }
181}
182
183#[derive(Debug, Clone, Serialize, Deserialize)]
185pub struct MemoryAnalysisConfig {
186 pub enable_capacity_estimation: bool,
188 pub capacity_tasks: Vec<MemoryTask>,
190 pub enable_nonlinear: bool,
192 pub nonlinearity_orders: Vec<usize>,
194 pub enable_temporal_correlation: bool,
196 pub correlation_lags: Vec<usize>,
198 pub enable_ipc: bool,
200 pub ipc_functions: Vec<IPCFunction>,
202 pub enable_entropy: bool,
204}
205
206impl Default for MemoryAnalysisConfig {
207 fn default() -> Self {
208 Self {
209 enable_capacity_estimation: true,
210 capacity_tasks: vec![
211 MemoryTask::DelayLine,
212 MemoryTask::TemporalXOR,
213 MemoryTask::Parity,
214 ],
215 enable_nonlinear: true,
216 nonlinearity_orders: vec![2, 3, 4],
217 enable_temporal_correlation: true,
218 correlation_lags: (1..=20).collect(),
219 enable_ipc: true,
220 ipc_functions: vec![
221 IPCFunction::Linear,
222 IPCFunction::Quadratic,
223 IPCFunction::Cubic,
224 ],
225 enable_entropy: true,
226 }
227 }
228}