All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
- The
{DFA,Mealy,}W{p,}MethodEQOracle(MembershipOracle, int, int)constructor no longer interprets its secondintparameter as the batch size, but as an estimate for the expected SUL size. In order to explicitly set the batch size of the oracle, use the{DFA,Mealy,}W{p,}MethodEQOracle(MembershipOracle, int, int, int)constructor. Now, the two parameterslookaheadandexpectedSizewill determine the length of the middle part viaMath.max(lookahead, expectedSize - hypothesis.size()). This allows to dynamically adjust the length of the middle part throughout the learning process. See LearnLib/automatalib#32. - Several DFA/Mealy specific (oracle) subclasses are now automatically generated. As a result they are no longer an inner class, but an indepentend top-level class. This requires to update the import statements.
- As a remainder of its initial implementation, the
TTTEventListener(and the corresponding event feature in the TTT algorithm) has been removed due to the lack of usage.
0.14.0 - 2019-02-18
- Added support for black-box-checking (thanks to Jeroen Meijer).
- Added support for learning partial Mealy Machines with state-local inputs via L* (thanks to Maren Geske).
- Added support for resumable caches.
DynamicParallelOracles can now be constructed from a collection of independent oracles.- Support for Java 11. Note: LearnLib/AutomataLib still targets Java 8, and thus needs classes provided by this environment (specifically: annotations from
javax.annotation). If you plan to use LearnLib/AutomataLib in a Java 11+ environment, make sure to provide these classes. They are not shipped with LearnLib/AutomataLib.
- Refactored the following packages/classes:
de.learnlib.api.algorithm.feature.SupportsGrowingAlphabet->net.automatalib.SupportsGrowingAlphabetde.learnlib.api.algorithm.feature.ResumableLearner->de.learnlib.api.Resumable
- Some runtime properties for dynamically configuring LearnLib have been renamed. There now exists the
LearnLibPropertyenum as a single reference point for all available properties. - The node iterators for discrimination trees are now hidden behind the
DiscriminationTreeIteratorsfactory. - Parallel Oracles:
- The
withDefault*methods have been removed from the{Dynamic,Static}PrallelOracleBuilders. If needed, use the regularwith*methods and supply the public default values from{Dynamic,Static}PrallelOracle. - The
new*ParallelOraclemethods from theParallelOracleBuildersfactory no longer interpret a single membership oracle parameter as a supplier to a shared oracle, but rather as a single oracle (and thus return a builder for a parallel oracle with fixed pool size).
- The
- Adding new symbols to learning algorithms (via the
SupportsGrowingAlphabetinterface) now requires the learner to be initialized with aGrowingAlphabetinstance. This is to make sure that the user has full control over which alphabet instance should be used instead of LearnLib making decisions on behalf of the user. - Discrimination-Tree based Learners (DT, KV, TTT) now batch queries whenever possible, thus allowing to fully utilize parallel oracles.
- Also, see the changes in AutomataLib
- Several bugs detected by our ongoing efforts to write tests.
0.13.1 - 2018-05-11
- Fixed an out-of-bounds error in a cache implementation
- Fixed visibility issues with exportable classes used for the
ResumableLearnerinterface - Fixed an issue when adding a new symbol to a learner and the initial alphabet was already an instance of
GrowableAlphabet - General consolidations (typos, wrong documentation, etc.)
0.13.0 - 2018-02-08
- Added randomized version of W(p)-Method based equivalence oracles (see #40)
- Added the ADT (adaptive distinguishing tree) active learning algorithm
- Added two active learning algorithms for visibly pushdown languages.
- Added the RPNI (regular positive-negative inference) passive learning algorithm, including EDSM (evidence-driven state merging) and MDL (minimum description length) variants.
- Many active learning algorithms now support adding additional alphabet symbols after initial instantiation/starting of the learning process.
- Added support for suspending the learning process to a savable / serializable state. The learning process may be resumed from this state at a later point in time.
- Added the
AbstractTestWordEQOracleclass, which allows to implement custom equivalence oracles solely based on lazy (stream-based) test-word generation. Existing equivalence oracles (as far as possible) have been reworked to extend this class and thus profit from its built-in laziness and batch (parallelization) support.
-
Refactored the Maven artifact and Java package structure. Have a look at the List of LearnLib Artifacts for an updated overview of available artifacts. In general, no functionality should have been removed (except of code marked with
@Deprecated). The easiest way to migrate your code to the new version is probably by using the Auto-Import feature of your IDE of choice.The non-trivial refactorings include:
- API methods no longer use wildcards in generic return parameters. This allows your code to not having to deal with them.
- Changes to AutomataLib.
-
Replaced
System.outand JUL logging, with calls to a SLF4j facade. -
Code improvements due to employment of several static code-analysis plugins (findbugs, checkstyle, PMD, etc.) as well as setting up continuous integration at Travis CI.
- Several bugs detected either by our newly employed static code-analysis toolchain or by our ongoing efforts to write tests.