benchmark-systems
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (10.7%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: suppress-unileon
- License: mit
- Language: Python
- Default Branch: main
- Size: 3.8 MB
Statistics
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
- Releases: 1
Metadata Files
README.md
benchmark-systems
Open collection of benchmark problems. The goal is to provide a common set of models to test and compare different control algorithms. These models have been used by the control community in many different implementations.
The package is designed to be easy to use, using as few dependencies as possible. It is developed by SUPPRESS Research Group, from Universidad de León.
Dependencies
The package has the following dependencies:
- scipy >= 1.14.1
- scipy-dae >= 0.0.6
How it works
Some models are implemented as functions that return a state-space representation of the system:
```python def pendulum(t, x, *, m: float, L: float, drag: float = 0.0, u: float = 0.0) -> np.ndarray: ''' Just a humble pendulum. '''
g = Const.GRAVITY
# State space
dx = np.zeros(2)
dx[0] = x[1]
dx[1] = -g/L * sin(x[0]) - drag/(m*L**2)*x[1] + 1/(m*L**2)*u
return dx
``
These models can be integrated usingsolve_ivpfromscipy`:
```python pendulumstates = solveivp(lambda t, x: pendulum(t, x, m=1, L=2, drag=0.0, u=0), tspan=(0, 20), y0=[np.pi-0.1, 0], teval=np.linspace(0, 20, 1000))
for i, label, in enumerate(['Theta (rad)', 'Omega (rad/s)']):
plt.plot(pendulumstates.t, pendulumstates.y[i], label=label)
plt.xlabel('Time (s)')
plt.legend()
```

Advanced models
Other models can be expressed more conveniently as a set of differential-algebraic equations (DAE). We select scipy-dae to solve these models because it uses almost the same interface as scipy, and aims to be integrated into scipy in the future.
For example, the model of a quadrotor can be expressed as a DAE or an ODE:

Image source: https://es.mathworks.com/help/symbolic/derive-quadrotor-dynamics-for-nonlinearMPC.html
Newton-Euler model (ODE) States: $x = [x \ y \ z \ \phi \ \theta \ \psi \ s \ v \ w \ p \ q \ r]^T$;
Euler-Lagrange model (DAE) States: $x = [x \ y \ z \ \phi \ \theta \ \psi \ \dot{x} \ \dot{y} \ \dot{z} \ \dot{\phi} \ \dot{\theta} \ \dot{\psi} ]^T$;
Control actions: $u = [\omega1^2 \ \omega2^2 \ \omega3^2 \ \omega4^2 ]^T$
```python quadrotor_params = { 'Ixx': 1.2, 'Iyy': 1.2, 'Izz': 2.3, 'k': 1, 'L': 0.25, 'm': 2, 'drag': 0.2 }
w2 = quadrotorparams['m']*9.81/(quadrotorparams['k']4) # Squared speed of the propellers in order to hover ... 4kw^2 = mg
u = [w20.97, w2, w21.03, w2] # Pitch only
quadrotorodestates = solveivp(lambda t, x: quadrotorode(t, x, *quadrotorparams, u=u), tspan=(0, 5), y0=[0,0,5] + 9[0], teval=np.linspace(0, 5, 1000)) quadrotordaestates = solvedae(lambda t, x, xdot: quadrotordae(t, x, xdot, **quadrotorparams, u=u), tspan=(0, 5), y0=[0,0,5] + 9*[0], ydot0=np.zeros(12), t_eval=np.linspace(0, 5, 1000))
fig, axs = plt.subplots(2, 1, sharex=True) for i, label in enumerate(['X (m)', 'Y (m)', 'Z (m)', 'Phi (rad)', 'Theta (rad)', 'Psi (rad)']): axs[0].plot(quadrotorodestates.t, quadrotorodestates.y[i], label=label) axs[1].plot(quadrotordaestates.t, quadrotordaestates.y[i], label=label) for i, model in enumerate(['Newton-Euler model', 'Euler-Lagrange model']): axs[i].legend() axs[i].settitle(model) axs[-1].setxlabel('Time (s)') ```

Models
All model simulations are available in the examples folder as a Jupyter notebook.
Installation
Currently, a prerelease version is available via TestPypi:
bash
pip install -i https://test.pypi.org/simple/ benchmark-systems
Owner
- Name: SUPPRESS Research Group
- Login: suppress-unileon
- Kind: organization
- Location: Spain
- Website: https://suppress.unileon.es
- Repositories: 1
- Profile: https://github.com/suppress-unileon
SUPPRESS Research Group. University of León (Spain)
Citation (CITATION.cff)
# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!
cff-version: 1.2.0
title: benchmark-systems
message: >-
If you use this software, please cite it using the
metadata from this file.
type: software
authors:
- given-names: Guzmán
family-names: González
email: ggonzm@unileon.es
affiliation: University of León
orcid: 'https://orcid.org/0000-0002-2130-7867'
- given-names: Antonio
family-names: Morán
email: a.moran@unileon.es
affiliation: University of León
orcid: 'https://orcid.org/0000-0002-2762-6949'
- given-names: Miguel Ángel
family-names: Prada Medrano
email: ma.prada@unileon.es
affiliation: University of León
orcid: 'https://orcid.org/0000-0002-1563-1556'
- given-names: Manuel
family-names: Dominguez Gonzalez
email: mdomg@unileon.es
affiliation: University of León
orcid: 'https://orcid.org/0000-0002-3921-1599'
year: 2025
repository-code: 'https://github.com/suppress-unileon/benchmark-systems'
abstract: >-
Open collection of benchmark problems. The goal is to
provide a common set of models to test and compare
different control algorithms. These models have been used
by the control community in many different
implementations.
GitHub Events
Total
- Release event: 1
- Delete event: 1
- Member event: 1
- Push event: 17
- Create event: 5
Last Year
- Release event: 1
- Delete event: 1
- Member event: 1
- Push event: 17
- Create event: 5
Dependencies
- scipy >=1.14.1
- scipy-dae >=0.0.6