RCUKF is a hybrid framework that combines Reservoir Computing (RC) and the Unscented Kalman Filter (UKF) for robust, data-driven state estimation in nonlinear dynamical systems. This approach avoids explicit modeling of system dynamics and is especially powerful for chaotic and partially observed systems.
- ✅ Model-free learning using Reservoir Computing (Echo State Network)
- ✅ Filtering with Unscented Kalman Filter
- ✅ No backpropagation: fast training using ridge regression
- ✅ Supports chaotic systems like Lorenz, Rössler, Mackey-Glass
- ✅ Plug-and-play modular design
RCUKF/
├── benchmarks/ # RC vs RCUKF RMSE comparison and plots
├── data_gen/ # Noisy synthetic data generators
├── demos/ # End-to-end implementations of RCUKF
├── rcukfpy/ # Core implementation (RC, UKF, RCUKF)
├── utils/ # RMSE calculator and helper utils
├── LICENSE
└── README.md
git clone https://github.com/kmranrg/rcukf.git
cd rcukf
pip install numpy matplotlib
Compare RC-only vs RC+UKF on the Lorenz system:
python -m benchmarks.RC_vs_RCplusUKF_Lorenz
Other systems:
python -m benchmarks.RC_vs_RCplusUKF_Rossler
python -m benchmarks.RC_vs_RCplusUKF_MackeyGlass
python demos.RCplusUKF_LorenzImplementation
python demos.RCplusUKF_MackeyGlassImplementation
python demos.RCplusUKF_RosslerImplementation
ReservoirComputer
: Trains a readout model to approximate system dynamics.UnscentedKalmanFilter
: Uses sigma points to filter noisy observations.RC_UKF
: Wraps both modules to predict system state using data + measurements.
Module | Description |
---|---|
rcukfpy/RC.py |
Echo State Network (Reservoir Computer) |
rcukfpy/UKF.py |
UKF implementation for nonlinear state estimation |
rcukfpy/RCplusUKF.py |
Combines RC and UKF into a hybrid state estimator |
data_gen/*.py |
Noisy time series generators (Lorenz, Rossler, etc.) |
utils/compute_error.py |
RMSE computation per dimension |
benchmarks/*.py |
Compare RMSE of RC-only vs RC+UKF |
demos/*.py |
Full pipeline demos (training + filtering + plots) |
Pull requests are welcome! Please open an issue first to discuss any major changes or improvements.