SIPPY is a library for linear model identification of dynamic systems. It aims to be the most user-friendly and comprehensive library for system identification in Python.
Originally developed by Giuseppe Armenise under supervision of Prof. Gabriele Pannocchia.
To identify system as Auto-Regressive with eXogenous Inputs model (ARX) using Linear Least Squares (LLS) on example data, simply run:
from sippy_unipi import system_identification
from sippy_unipi.datasets import load_sample_siso
Y, U = load_sample_siso()
Id_ARX = system_identification(
Y,
U,
"ARX",
*([4], [[3]], [2], [[11]]),
id_mode="LLS",
)
Get your hand on the algorithms using following Jupyter notebooks and play around with open-spource example data:
- ARX systems (multi input-multi output case)
- ARMAX systems (single input-single output case)
- ARMAX systems (multi input-multi output case)
- Input-output structures (using optimization methods)
- Input-output structures (using recursive methods)
- State space system (multi input-multi output case)
- Continuous Stirred Tank Reactor
Intended to work with Python 3.10 and above.
Simply run:
pip install sippy_unipi
To install from source, use poetry:
poetry install
Alternatively, you can use Docker to set up the environment. Follow these steps:
-
Clone the repository:
git clone https://github.com/CPCLAB-UNIPI/SIPPY.git cd SIPPY
-
Build the Docker image:
docker build -t sippy .
-
Run the Docker container:
docker run -it --rm sippy
SIPPY provides implementations of the following:
- FIR
- ARX
- ARMAX
- ARMA
- ARARX
- ARARMAX
- OE
- BJ
- GEN
- N4SID
- MOESP
- CVA
- PARSIM_P
- PARSIM_S
- PARSIM_K
Feel free to contribute in any way you like, we're always open to new ideas and approaches.
- Feel welcome to open an issue if you think you've spotted a bug or a performance issue.
- University of Pisa, Department of Civil and Industrial Engineering (DICI), Chemical Process Control Laboratory (CPCLab)
- Slovak University of Technology in Bratislava, Department of Information Engineering and Process Control (DIEPC)
If the service or the algorithm has been useful to you and you would like to cite it in an scientific publication, please refer to the paper:
@inproceedings{Armenise2018,
title = {An Open-Source System Identification Package for Multivariable Processes},
author = {Armenise, Giuseppe and Vaccari, Marco and {Bacci di Capaci}, Riccardo and Pannocchia, Gabriele},
booktitle = {2018 UKACC 12th International Conference on Control (CONTROL)},
pages = {152--157},
year = {2018},
organization = {IEEE}
}
This algorithm is free and open-source software licensed under the LGPL. license, meaning the code can be used royalty-free even in commercial applications.