learnlib-0.17.0
·
100 commits
to develop
since this release
Added
- Migrated the AAAR algorithm from the old closed-source LearnLib (thanks to @mtf90).
- Added Moore versions of the
OP,TTT, andLStarlearners (thanks to @mohbayram). - Added the OML (optimal-MAT-learner) active learning algorithm (thanks to @fhowar).
- Added the OSTIA passive learning algorithm (thanks to @aleksander-mendoza).
- The
RPNIlearner now supportsMooreMachines (thanks to @mtf90). - Added new learning algorithms for procedural systems such as SPAs, SBAs, and SPMMs (thanks to @mtf90).
Changed
- Refactorings
-
Many LearnLib packages have been refactored from plural-based keywords to singular-based keywords. Some examples are
- renamed all learning algorithm packages from
de.learnlib.algorithms.*tode.learnlib.algorithm.*. - renamed
de.learnlib.counterexamples.*tode.learnlib.counterexample.*. - renamed
de.learnlib.drivers.*tode.learnlib.driver.*. - renamed
de.learnlib.util.statistics.*tode.learnlib.util.statistic.*. - etc.
While this may cause some refactoring, it should only affect import statements as the names of most classes remain identical.
- renamed all learning algorithm packages from
-
Some actual re-namings concern
- All code concerning visibly push-down automata now uses the "vpa" acronym (previously "vpda"). This includes package names, class names and (Maven) module names.
- The "discrimination-tree" learner has been renamed to "observation-pack". This includes classes (
DTLearnerDFA->OPLearnerDFA, etc.), package names, and Maven modules. The same refactoring happened for the VPA-based version of the learner. - The
learnlib-acexMaven module has been merged with thelearnlib-counterexamplesmodule. - Classes in the
learnlib-apihave been moved fromde.learnlib.apitode.learnlib. - Refactored the package
de.learnlib.datastructure.pta.pta.*tode.learnlib.datastructure.pta.*. - Refactored the package
de.learnlib.driver.util.*tode.learnlib.driver.simulator.*. - Moved classes from the package
de.learnlib.mapper.api.*tode.learnlib.sul.*. - Renamed
PassiveLearnerVariantTICasetoPassiveLearnerVariantITCase.
-
AbstractTTTHypothesishas received an additional type parameter for its state type.AutomatonOracle#acceptsno longer has alengthparameter. Provide a correctly sizedinputiterable instead.- Classes revolving around the
ContextExecutableInputSULhave been moved from thelearnlib-mappermodule to thelearnlib-drivers-basicmodule. - The
CounterOracleandJointCounterOraclehave been merged. Now there only exists a singleCounterOraclethat counts both the number of queries and the number of symbols therein. - The
{DFA,Mealy}CacheOracles and theSULCacheare no longer thread-safe because the intended pipeline of a parallel setup (as suggested by the LearnLib factory methods) consists of a single-threaded cache that delegates to parallel (non-cached) oracles. Here, the synchronization logic only adds unnecessary overhead. In case you want a shared, thread-safe cache (which was currently not possible to set up conveniently) thelearnlib-parallelismmodule now contains theThreadSafe{DFA,Mealy,SUL}Cachesfactories which allow one to construct parallel oracles (whose parameters and return types are tailored towards using ourParallelOracleBuildersfactory) with a shared cache. See the in-treeParallelismExample2for reference. PTAs now read their sample inputs asIntSeqs.PassiveLearningAlgorithm#computeModeldid not specify whether repeated calls to the method should yield identical models. It is now explicitly left open to the respective implementation to support this behavior.BlueFringeRPNI{DFA,Mealy,Moore}explicitly does not support this behavior, as the internal prefix-tree acceptor is now constructed on-the-fly as samples are added via theaddSamplemethods. This allows to drop the previously redundant caching of samples and reduce memory pressure.BlueFringeEDSMDFAandBlueFringeMDLDFAstill have to cache the samples internally and therefore still support repeated model construction.- The
Resumablesemantics have changed: the returned state object no longer implementsSerializable. We never fully supported the semantics of the interface and never intended to do so. In fact, the old approach failed miserably if any class was involved where we missed an "implements Serializable" statement. In order to prevent confusion by promising false contracts, implementing this markup interface has been removed. Serialization should now be done in user-land via one of the many external (and more optimizable) serialization frameworks such as FST, XStream, etc. See the in-treeResumableExamplefor reference. - The
ADTclass is no longer initialized with aleafSplitterbut theextendLeafandsplitLeafmethods take an additional argument. This allows for a more customizable behavior. - The automaton-specific
SimulatorOracles are now generated automatically and therefore reside in the packagede.learnlib.oracle.membershiprather that being an inner-class of theSimulatorOracle. SymbolQueryCachenow needs to be created via theMealyCachesfactory.SimplePOJOTestDriverno longer uses a mapper to suppressSULExceptions but instead operates directly on the POJO with simplified inputs/outputs and propagates any exceptions thrown. To complement this change, the oldSimplePOJODataMapperhas been renamed toSimplePOJOExceptionMapperand only deals with mapping exceptions now. The old behavior can be restored by combining the two classes manually viaSULMappers#apply.- Switched to AutomataLib 0.11.0.
Removed
- Removed (unused)
de.learnlib.datastructure.pta.pta.PropertyConflictException,de.learnlib.datastructure.observationtable.InvalidRowException. - Removed the (protected)
exposeInternalHypothesismethod onAbstractAutomatonLStar. Subclasses should directly implement thegetHypothesisModelmethod. - Removed the
EquivalenceQueriesfactory. All provided equivalence checkers are available via public constructors which allow for more flexible parameterization. - Removed the
Filterinterface andFilterChainclass. Instantiating the filters that are required for constructing a filter chain already requires setting the delegate oracles. Therefore, the only effect of this interface is that the attributes of the filters cannot be final. - Removed
LearnLogger. All code was migrated to use the native SLF4j facade and now uses the markers provided in theCategoryclass to accentuate the different log messages and provide client code with a means to handle the different log messages (similar to the previous purpose-specific log methods).
Fixed
- Fixed a bug when adding new alphabet symbols to LStar-based learners which use a counterexample handler that requires consistency checks.
New Contributors
- @aleksander-mendoza made their first contribution in #74
- @mohbayram made their first contribution in #87