quantrs2_sim/quantum_reservoir_computing_enhanced/
config.rs

1//! Configuration types for Quantum Reservoir Computing
2//!
3//! This module provides all configuration structs for the QRC framework.
4
5use serde::{Deserialize, Serialize};
6
7use super::types::{
8    ActivationFunction, IPCFunction, InputEncoding, LearningAlgorithm, MemoryKernel, MemoryTask,
9    OutputMeasurement, QuantumReservoirArchitecture, ReservoirDynamics,
10};
11
12/// Enhanced quantum reservoir computing configuration
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct QuantumReservoirConfig {
15    /// Number of qubits in the reservoir
16    pub num_qubits: usize,
17    /// Reservoir architecture type
18    pub architecture: QuantumReservoirArchitecture,
19    /// Dynamics evolution type
20    pub dynamics: ReservoirDynamics,
21    /// Input encoding method
22    pub input_encoding: InputEncoding,
23    /// Output measurement strategy
24    pub output_measurement: OutputMeasurement,
25    /// Advanced learning algorithm configuration
26    pub learning_config: AdvancedLearningConfig,
27    /// Time series modeling configuration
28    pub time_series_config: TimeSeriesConfig,
29    /// Memory analysis configuration
30    pub memory_config: MemoryAnalysisConfig,
31    /// Time step for evolution
32    pub time_step: f64,
33    /// Number of evolution steps per input
34    pub evolution_steps: usize,
35    /// Reservoir coupling strength
36    pub coupling_strength: f64,
37    /// Noise level (for NISQ dynamics)
38    pub noise_level: f64,
39    /// Memory capacity (time steps to remember)
40    pub memory_capacity: usize,
41    /// Enable real-time adaptation
42    pub adaptive_learning: bool,
43    /// Learning rate for adaptation
44    pub learning_rate: f64,
45    /// Washout period (initial time steps to ignore)
46    pub washout_period: usize,
47    /// Random seed for reproducibility
48    pub random_seed: Option<u64>,
49    /// Enable quantum error correction
50    pub enable_qec: bool,
51    /// Precision for calculations
52    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/// Advanced learning algorithm configuration
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct AdvancedLearningConfig {
84    /// Primary learning algorithm
85    pub algorithm: LearningAlgorithm,
86    /// Regularization parameter (lambda)
87    pub regularization: f64,
88    /// L1 ratio for Elastic Net (0.0 = Ridge, 1.0 = LASSO)
89    pub l1_ratio: f64,
90    /// Forgetting factor for RLS
91    pub forgetting_factor: f64,
92    /// Process noise for Kalman filter
93    pub process_noise: f64,
94    /// Measurement noise for Kalman filter
95    pub measurement_noise: f64,
96    /// Neural network architecture
97    pub nn_architecture: Vec<usize>,
98    /// Neural network activation function
99    pub nn_activation: ActivationFunction,
100    /// Number of training epochs
101    pub epochs: usize,
102    /// Batch size for training
103    pub batch_size: usize,
104    /// Early stopping patience
105    pub early_stopping_patience: usize,
106    /// Cross-validation folds
107    pub cv_folds: usize,
108    /// Enable ensemble methods
109    pub enable_ensemble: bool,
110    /// Number of ensemble members
111    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/// Time series modeling configuration
136#[derive(Debug, Clone, Serialize, Deserialize)]
137pub struct TimeSeriesConfig {
138    /// Enable ARIMA-like modeling
139    pub enable_arima: bool,
140    /// AR order (autoregressive)
141    pub ar_order: usize,
142    /// MA order (moving average)
143    pub ma_order: usize,
144    /// Differencing order
145    pub diff_order: usize,
146    /// Enable nonlinear autoregressive model
147    pub enable_nar: bool,
148    /// NAR model order
149    pub nar_order: usize,
150    /// Memory kernel type
151    pub memory_kernel: MemoryKernel,
152    /// Kernel parameters
153    pub kernel_params: Vec<f64>,
154    /// Enable seasonal decomposition
155    pub enable_seasonal: bool,
156    /// Seasonal period
157    pub seasonal_period: usize,
158    /// Enable change point detection
159    pub enable_changepoint: bool,
160    /// Anomaly detection threshold
161    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/// Memory analysis configuration
184#[derive(Debug, Clone, Serialize, Deserialize)]
185pub struct MemoryAnalysisConfig {
186    /// Enable memory capacity estimation
187    pub enable_capacity_estimation: bool,
188    /// Memory capacity test tasks
189    pub capacity_tasks: Vec<MemoryTask>,
190    /// Enable nonlinear memory analysis
191    pub enable_nonlinear: bool,
192    /// Nonlinearity test orders
193    pub nonlinearity_orders: Vec<usize>,
194    /// Enable temporal correlation analysis
195    pub enable_temporal_correlation: bool,
196    /// Correlation lag range
197    pub correlation_lags: Vec<usize>,
198    /// Information processing capacity
199    pub enable_ipc: bool,
200    /// IPC test functions
201    pub ipc_functions: Vec<IPCFunction>,
202    /// Enable entropy analysis
203    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}