use serde::{Deserialize, Serialize};
use super::types::{
ActivationFunction, IPCFunction, InputEncoding, LearningAlgorithm, MemoryKernel, MemoryTask,
OutputMeasurement, QuantumReservoirArchitecture, ReservoirDynamics,
};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QuantumReservoirConfig {
pub num_qubits: usize,
pub architecture: QuantumReservoirArchitecture,
pub dynamics: ReservoirDynamics,
pub input_encoding: InputEncoding,
pub output_measurement: OutputMeasurement,
pub learning_config: AdvancedLearningConfig,
pub time_series_config: TimeSeriesConfig,
pub memory_config: MemoryAnalysisConfig,
pub time_step: f64,
pub evolution_steps: usize,
pub coupling_strength: f64,
pub noise_level: f64,
pub memory_capacity: usize,
pub adaptive_learning: bool,
pub learning_rate: f64,
pub washout_period: usize,
pub random_seed: Option<u64>,
pub enable_qec: bool,
pub precision: f64,
}
impl Default for QuantumReservoirConfig {
fn default() -> Self {
Self {
num_qubits: 8,
architecture: QuantumReservoirArchitecture::RandomCircuit,
dynamics: ReservoirDynamics::Unitary,
input_encoding: InputEncoding::Amplitude,
output_measurement: OutputMeasurement::PauliExpectation,
learning_config: AdvancedLearningConfig::default(),
time_series_config: TimeSeriesConfig::default(),
memory_config: MemoryAnalysisConfig::default(),
time_step: 0.1,
evolution_steps: 10,
coupling_strength: 1.0,
noise_level: 0.01,
memory_capacity: 100,
adaptive_learning: true,
learning_rate: 0.01,
washout_period: 50,
random_seed: None,
enable_qec: false,
precision: 1e-8,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdvancedLearningConfig {
pub algorithm: LearningAlgorithm,
pub regularization: f64,
pub l1_ratio: f64,
pub forgetting_factor: f64,
pub process_noise: f64,
pub measurement_noise: f64,
pub nn_architecture: Vec<usize>,
pub nn_activation: ActivationFunction,
pub epochs: usize,
pub batch_size: usize,
pub early_stopping_patience: usize,
pub cv_folds: usize,
pub enable_ensemble: bool,
pub ensemble_size: usize,
}
impl Default for AdvancedLearningConfig {
fn default() -> Self {
Self {
algorithm: LearningAlgorithm::Ridge,
regularization: 1e-6,
l1_ratio: 0.5,
forgetting_factor: 0.99,
process_noise: 1e-4,
measurement_noise: 1e-3,
nn_architecture: vec![64, 32, 16],
nn_activation: ActivationFunction::ReLU,
epochs: 100,
batch_size: 32,
early_stopping_patience: 10,
cv_folds: 5,
enable_ensemble: false,
ensemble_size: 5,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeSeriesConfig {
pub enable_arima: bool,
pub ar_order: usize,
pub ma_order: usize,
pub diff_order: usize,
pub enable_nar: bool,
pub nar_order: usize,
pub memory_kernel: MemoryKernel,
pub kernel_params: Vec<f64>,
pub enable_seasonal: bool,
pub seasonal_period: usize,
pub enable_changepoint: bool,
pub anomaly_threshold: f64,
}
impl Default for TimeSeriesConfig {
fn default() -> Self {
Self {
enable_arima: true,
ar_order: 2,
ma_order: 1,
diff_order: 1,
enable_nar: true,
nar_order: 3,
memory_kernel: MemoryKernel::Exponential,
kernel_params: vec![0.9, 0.1],
enable_seasonal: false,
seasonal_period: 12,
enable_changepoint: false,
anomaly_threshold: 2.0,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryAnalysisConfig {
pub enable_capacity_estimation: bool,
pub capacity_tasks: Vec<MemoryTask>,
pub enable_nonlinear: bool,
pub nonlinearity_orders: Vec<usize>,
pub enable_temporal_correlation: bool,
pub correlation_lags: Vec<usize>,
pub enable_ipc: bool,
pub ipc_functions: Vec<IPCFunction>,
pub enable_entropy: bool,
}
impl Default for MemoryAnalysisConfig {
fn default() -> Self {
Self {
enable_capacity_estimation: true,
capacity_tasks: vec![
MemoryTask::DelayLine,
MemoryTask::TemporalXOR,
MemoryTask::Parity,
],
enable_nonlinear: true,
nonlinearity_orders: vec![2, 3, 4],
enable_temporal_correlation: true,
correlation_lags: (1..=20).collect(),
enable_ipc: true,
ipc_functions: vec![
IPCFunction::Linear,
IPCFunction::Quadratic,
IPCFunction::Cubic,
],
enable_entropy: true,
}
}
}