quantrs2_sim/quantum_reservoir_computing_enhanced/
time_series.rs

1//! Time Series Modeling for Quantum Reservoir Computing
2//!
3//! This module provides time series prediction models including ARIMA and NAR.
4
5use scirs2_core::ndarray::{Array1, Array2};
6use serde::{Deserialize, Serialize};
7use std::collections::VecDeque;
8
9use super::config::TimeSeriesConfig;
10use super::types::ActivationFunction;
11
12/// Time series prediction models
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct TimeSeriesPredictor {
15    /// ARIMA model parameters
16    pub arima_params: ARIMAParams,
17    /// NAR model state
18    pub nar_state: NARState,
19    /// Memory kernel weights
20    pub kernel_weights: Array1<f64>,
21    /// Trend model
22    pub trend_model: TrendModel,
23}
24
25impl TimeSeriesPredictor {
26    /// Create new time series predictor
27    #[must_use]
28    pub fn new(config: &TimeSeriesConfig) -> Self {
29        Self {
30            arima_params: ARIMAParams {
31                ar_coeffs: Array1::zeros(config.ar_order),
32                ma_coeffs: Array1::zeros(config.ma_order),
33                diff_order: config.diff_order,
34                residuals: VecDeque::with_capacity(config.ma_order),
35                variance: 1.0,
36            },
37            nar_state: NARState {
38                order: config.nar_order,
39                coeffs: Array2::zeros((config.nar_order, config.nar_order)),
40                history: VecDeque::with_capacity(config.nar_order),
41                activation: ActivationFunction::Tanh,
42            },
43            kernel_weights: Array1::from_vec(config.kernel_params.clone()),
44            trend_model: TrendModel {
45                params: vec![0.0, 0.0], // Linear trend: intercept, slope
46                strength: 0.0,
47                direction: 0.0,
48            },
49        }
50    }
51}
52
53/// ARIMA model parameters
54#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct ARIMAParams {
56    /// AR coefficients
57    pub ar_coeffs: Array1<f64>,
58    /// MA coefficients
59    pub ma_coeffs: Array1<f64>,
60    /// Differencing order
61    pub diff_order: usize,
62    /// Model residuals
63    pub residuals: VecDeque<f64>,
64    /// Model variance
65    pub variance: f64,
66}
67
68/// Nonlinear autoregressive model state
69#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct NARState {
71    /// Model order
72    pub order: usize,
73    /// Nonlinear coefficients
74    pub coeffs: Array2<f64>,
75    /// Past values buffer
76    pub history: VecDeque<f64>,
77    /// Activation function
78    pub activation: ActivationFunction,
79}
80
81/// Trend model
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct TrendModel {
84    /// Model parameters
85    pub params: Vec<f64>,
86    /// Trend strength
87    pub strength: f64,
88    /// Trend direction
89    pub direction: f64,
90}