HyPro - A C++ library for the representation of state sets for the reachability analysis of hybrid systems
The C++ library HyPro, which is a result of the project HyPro funded by the german research council, provides easy to use implementations of state set representations for the reachability analysis of hybrid systems via flowpipe-construction. It provides implementations of the most commonly used state set representations such as boxes, convex polytopes, support functions or zonotopes. All implementations conform to the same general interface, which allows the user to easily switch between representations (even during analysis).
Additionally, commonly used data-structures and algorithms required during the analysis are provided. The tool features a parser for Flow*-syntax and implementations of basic reachability analysis methods based on flowpipe-construction.
On the official project page you can find a collection of benchmarks as well.
The latest stable version can be obtained from the master-branch. The alpha-branch holds a development version - please check the CI-status to see whether this version is stable. Apart from compiling HyPro, a Docker image is available from DockerHub (both branches).
To be able to compile HyPro, the following dependencies must be met:
- a c++-compiler (g++/clang++)
- a Java runtime environment (e.g. openjdk-re)
Compiling the library
After installing the dependencies obtaining the source code from the git-repository, HyPro can be configured via cmake and built afterwards. We recommend an out-of-source build:
$ mkdir build && cd build $ cmake .. $ make resources $ make hypro
This minimal build will not compile tests. To compile tests as well and run them, you can use the target
$ make allTests $ make test
HyPro registers itself to cmake which means that any further cmake-project which depends on HyPro does not neccessarily require a system-installation of HyPro. Instead, it suffices to call
find_package(hypro) from cmake to locate the local build.
Examples & Usage
HyPro comes with some examples shipped, which may give you a hint on how to use the library. All examples are listed in the examples folder; all source files in this folder prefixed with
example_ are automatically assigned a corresponding target, i.e., the file
example_box.cpp can be compiled via the target