LearnLib is a free, open source (Apache License, v2.0) Java library for automata learning algorithms.
LearnLib is mainly developed at TU Dortmund University, Germany. Its original purpose is to provide a framework for research on automata learning algorithms as well as for their application in practice.
The public version is a re-implemented version of the former closed-source version of LearnLib. While certain features have been stripped for improved modularity, development has since then extended the features offered. Currently, the following learning algorithms with respective target models are supported:
Algorithm (active) | Target models | Algorithm (passive) | Models | |
---|---|---|---|---|
AAAR | DFA Mealy Moore |
OSTIA | SST |
|
ADT | Mealy |
RPNI (incl. variants) | DFA Mealy Moore |
|
DHC | Mealy |
|||
Kearns & Vazirani | DFA Mealy |
|||
L* (incl. variants) | DFA Mealy Moore |
|||
NL* | NFA |
|||
Observation Pack | DFA Mealy Moore VPA |
|||
OML | DFA Mealy |
|||
Procedural | SPA SBA SPMM |
|||
TTT | DFA Mealy Moore VPA |
Additionally, LearnLib offers a variety of tools to ease the practical application of automata learning on real-world systems. This includes drivers and mappers for interfacing software systems with the LearnLib API as well as caches and parallelization for improving the overall performance of the learning setup. Also, more nuanced setups such as Black-Box-Checking (via LTSMin) or inferring partial machines are possible.
While we strive to deliver code at a high quality, please note that there exist parts of the library that still need thorough testing. Contributions -- whether it is in the form of new features, better documentation or tests -- are welcome.
For simply using LearnLib you may use the Maven artifacts which are available in the Maven Central repository. It is also possible to download a bundled distribution artifact if you want to use LearnLib without Maven support. Note that LearnLib requires Java 11 (or newer) to build but still supports Java 8 at runtime.
If you intend to use development versions of LearnLib, you can either use the deployed SNAPSHOT artifacts from the continuous integration server (see Using Development Versions), or build them yourself. Simply clone the development branch of the repository
git clone -b develop --single-branch https://github.com/LearnLib/learnlib.git
and run a single mvn clean install
.
This will build all the required maven artifacts and will install them in your local Maven repository so that you can reference them in other projects.
If you plan to use a development version of LearnLib in an environment where no Maven support is available, simply run mvn clean package -Pbundles
.
The respective JARs are then available under distribution/target/bundles
.
Note: Development versions of LearnLib usually depend on development versions of AutomataLib. For building development versions of AutomataLib, see the corresponding documentation on the project's README.
For developing the code base of LearnLib it is suggested to use one of the major Java IDEs which come with out-of-the-box Maven support.
For IntelliJ IDEA:
File
-> New
-> Project from existing sources
and select the folder containing the development checkout.Create
.File
-> New
-> Module from existing sources
as the first step.For Eclipse:
Preferences
-> Maven
-> Annotation Processing
.File
-> Import...
and select "Existing Maven Projects".Finish
.If you have any questions regarding the usage of LearnLib or if you want to discuss new and exciting ideas for future contributions, feel free to use the Discussions page to get in touch with the LearnLib community.