quantrs2_sim/quantum_reservoir_computing_enhanced/
time_series.rs1use scirs2_core::ndarray::{Array1, Array2};
6use serde::{Deserialize, Serialize};
7use std::collections::VecDeque;
8
9use super::config::TimeSeriesConfig;
10use super::types::ActivationFunction;
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct TimeSeriesPredictor {
15 pub arima_params: ARIMAParams,
17 pub nar_state: NARState,
19 pub kernel_weights: Array1<f64>,
21 pub trend_model: TrendModel,
23}
24
25impl TimeSeriesPredictor {
26 #[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], strength: 0.0,
47 direction: 0.0,
48 },
49 }
50 }
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct ARIMAParams {
56 pub ar_coeffs: Array1<f64>,
58 pub ma_coeffs: Array1<f64>,
60 pub diff_order: usize,
62 pub residuals: VecDeque<f64>,
64 pub variance: f64,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct NARState {
71 pub order: usize,
73 pub coeffs: Array2<f64>,
75 pub history: VecDeque<f64>,
77 pub activation: ActivationFunction,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct TrendModel {
84 pub params: Vec<f64>,
86 pub strength: f64,
88 pub direction: f64,
90}