| |
|
||||||
|
|
|||||||
The discrete event systems library libFAUDES implements data structures and algorithms for finite automata and regular languages. The library takes a control theoretic perspective as originally introduced by P.J. Ramadge and W.M. Wonham in the 1980's. Since then, many researchers have contributed to supervisory control theory, including extensions for hierarchical, modular and decentralized controller synthesis; see [references]. With libFAUDES, we aim for (a) reduced coding effort in the implementation of methods for the control of discrete event systems, and (b) effective advertisement of such methods by making them readily accessible to the public.
G E T T I N G S T A R T E D
Access libFAUDES within your browser via the Lua-Console,
the pip-installable Python module faudes, or
the desktop application DESTool
C++ Library
libFAUDES is written in C++ with use of the Standard Template Library (STL). The libFAUDES generator classes are set-based models, that resemble the definition of the quintuple automaton G = (Q, Sigma, delta, Qo, Qm). Using libFAUDES to implement algorithms originally stated in terms of automata is straight forward and benefits from general infrastructure, like file I/O and visualisation via Graphviz/dot.
User Reference
The libFAUDES build system can organise an optional user reference, to complement the doxygen-generated C++ API documentation. Thus, developers who wish to illustrate, motivate or explain their algorithms by examples, informative text or formal definitions can directly address the end-user of libFAUDES based applications, e.g. luafaudes or DESTool.
Lua Scripting Support
The interpreter luafaudes makes libFAUDES data types and functions available within the scripting language Lua. The wrapper code that integrates libFAUDES with Lua is automatically generated by the build-system using the tool SWIG. The additional coding effort, required to provide access to libFAUDES extensions from within Lua, is minimal; see plug-in example. This makes libFAUDES an ideal platform to advertise newly developed approaches for the control of discrete event systems.
libFAUDES as a Python Module
Allthough Lua remains our core scripting environment, we alternatively provide libFAUDES as a Python C/C++ extension; i.e., a module that can be imported to Python by import faudes. The wrapper code is generated automatically by the identical SWIG interface definitions used for luafaudes; no extra coding effort to make libFAUDES functionality available to Python users.
Non-Restrictive Open-Source License
libFAUDES sources are distributed for free under conditions of the GNU Lesser General Public License (LGPL). There are no prohibitive restrictions to use the library in non-open source and/or commercial projects. libFAUDES comes with a (compile-time-) plug-in mechanism to extend the library in an organised manner. In particular, plug-in developers are invited but not forced to contribute their code to libFAUDES. Finally, due to the LGPL licensing, plug-in developers will never depend on future design/licensing decisions made by libFAUDES copyright holders.
Building on research results as referenced, the core library is continuously developed at the Lehrstuhl für Regelungstechnik (LRT) of the University Erlangen-Nürnberg. The first functional version was designed and coded by Bernd Opitz as a masters project [thesis], and since then was extended by numerous plug-ins, including external contributions.
As of March 2026, the following people have contributed to the development of the core library and its plug-ins:
We are committed to extend and improve libFAUDES. External contributions are highly welcome, for contact write to Thomas Moor.
Copyright (C) 2006 Bernd Opitz
Copyright (C) 2008 - 2010 Thomas Moor, Klaus Schmidt, Sebastian Perk
Copyright (C) 2011 - 2026 Thomas Moor, Klaus Schmidt
| 01.03.2026 | libFAUDES 2.34c | omega-automata plug-in |
| 01.05.2025 | libFAUDES 2.33a | prioritised events plug-in |
| 15.02.2023 | libFAUDES 2.32a | source code via GitHub |
| 01.02.2023 | libFAUDES 2.31c | Python bindings |
| 18.05.2021 | libFAUDES 2.30a | improvements in compositional verification |
| 15.12.2017 | libFAUDES 2.29a | incl. hybrid automata plug-in (optional, requires PPL/GMP) |
| 01.03.2016 | libFAUDES 2.27a | incl. compositional verification/synthesis |
| 15.05.2015 | libFAUDES 2.26a | updated Coordination Control plug-in |
| 19.09.2014 | libFAUDES 2.25a | browser-based Lua-Console |
| 03.04.2014 | libFAUDES 2.24a | optimisation/validation for 64-bit environments |
| 23.12.2013 | libFAUDES 2.23c | Fault-Tolerant Control lua-extension |
| 17.12.2013 | libFAUDES 2.23a | Pushdown plug-in for context free specification languages |
| 06.02.2012 | libFAUDES 2.21e | updated Coordination Control plug-in and D3RIP interface |
| 01.12.2011 | libFAUDES 2.21a | Modbus/TCP IoDevice |
| 01.04.2011 | libFAUDES 2.20a | Lua-Extensions |
| 15.12.2010 | libFAUDES 2.18a | IoSystem plug-in |
| 15.08.2010 | libFAUDES 2.16a | application "Flexible Manufacturing System" presented at WODES 2010 |
| 15.02.2010 | libFAUDES 2.14m | 2nd DESTool preview |
| 15.11.2009 | libFAUDES 2.14e | IoDevice and Diagnosis plug-ins |
| 01.06.2009 | libFAUDES 2.13a | luabindings, HioSys and Multitasking plug-ins |
| 10.11.2008 | libFAUDES 2.11v | Timed and Simulator plug-ins |
| 15.05.2008 | libFAUDES 2.09b | Observer plug-in |
| 01.05.2008 | libFAUDES 2.09a | used for WODES 2008 benchmark |
| 01.05.2006 | libFAUDES 1.00 | first public release with Bernd Opitz' Thesis |
libFAUDES 2.34d --- 2026.03.11 --- with "omegaaut-synthesis-observer-observability-diagnosis-hiosys-iosystem-multitasking-coordinationcontrol-timed-simulator-iodevice-priorities-luabindings-hybrid-example-pybindings"