https://github.com/shih-hao-tseng/SLSpy
Raw File
Tip revision: d5efee489ad1e2245f43fbccdfa6d0317b9f95ae authored by Shih-Hao Tseng on 29 June 2023, 05:48:13 UTC
update the version number format based on https://peps.python.org/pep-0440/
Tip revision: d5efee4
README.md
# SLSpy: Python-based System-Level Controller Synthesis Framework

## Synopsis
*SLSpy* provides a Python-based framework to design and simulate model-based control systems, especially for system level synthesis (SLS) methods. The details of the framework are described in the paper

Shih-Hao Tseng and Jing Shuang (Lisa) Li, ``[SLSpy: Python-Based System-Level Controller Synthesis Framework](https://arxiv.org/abs/2004.12565),'' 2020.

The synthesis workflow follows the structure in the paper

Shih-Hao Tseng and James Anderson, ``[Deployment Architectures for Cyber-Physical Control Systems](https://arxiv.org/abs/1911.01510),'' 2019. (also in *Proc. IEEE ACC*, 2020)

## System Requirement
<!--
* Python 2.7 or higher
* Python pip (or pip3 for Python 3)

We recommend using Python 3 (and pip3) or above. 
-->
* Python 3 or higher
* Python pip3

A system with both Python 3 and Python 2.7 may encounter installation error. In that case, please make Python 3 your default choice by appropriate aliasing.

SLSpy might still work for Python 2.7 (or higher Python 2 versions), but one should ensure CVXPY is version 1.1 or higher.

## Install
First install the necessary packages by

`sudo make setup`

then install SLSpy by typing

`sudo make install`

which has been tested under Fedora 30 and Ubuntu 18.04.

For Windows Subsystem for Linux and macOS, the user might need to install without `sudo` after the setup by

`make install`

<!--
## SLSpy Wiki
A simple wiki page with basic explanation can be found at 
http://slswiki.cms.caltech.edu/index.php/SLSpy

(The server is currently down. We will bring it back when the server is up again.
-->
## Get Started
To get started, please refer to the examples in the folder ``examples.''

For more detailed explanations about the basic framework structure, please refer to 

Shih-Hao Tseng and Jing Shuang (Lisa) Li, ``[SLSpy: Python-Based System-Level Controller Synthesis Framework](https://arxiv.org/abs/2004.12565),'' 2020.

## Built-in Synthesis Algorithms
* System Level Synthesis (FIR version), c.f.\
  James Anderson, John C. Doyle, Steven H. Low, and Nikolai Matni,\
  ``System Level Synthesis,'' *Annual Reviews in Control*, 2019.

  Yuh-Shyang Wang, Nikolai Matni, and John C. Doyle,\
  ``A System Level Approach to Controller Synthesis,'' *IEEE Trans. Autom. Control*, 2019

* Input-Output Parameterization (FIR version), c.f.\
  Luca Furieri, Yang Zheng, Antonis Papachristodoulou, and Maryam Kamgarpour,\
  ``An Input-Output Parameterization of Stabilizing Controllers: Amidst Youla and System Level Synthesis,'' *IEEE Control Systems Letters*, 2019

## Applicable Scenario
Currently, SLSpy can handle a linear time-invariant (LTI) system by synthesizing finite impulse response (FIR) controller using SLS/IOP. It is possible to deal with linear time-variant (LTV) system under SLSpy framework by introducing customized system model, controller model, and synthesizer.

The way SLSpy works is to express transfer matrices as a list. For example, an FIR transfer matrix <b>Φ</b> with the z-transform

<b>Φ</b> = Σ_{t=0}^T Φ[t] z^{-t}

is expressed by

[ Φ[0], Φ[1], ..., Φ[T] ]

in the codes.
back to top