Skip to content

Instantly share code, notes, and snippets.

@mtf90
Created May 1, 2020 15:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mtf90/77cfd55083b5a402b9efc7c94cdd1626 to your computer and use it in GitHub Desktop.
Save mtf90/77cfd55083b5a402b9efc7c94cdd1626 to your computer and use it in GitHub Desktop.
A small example for instantiating different kinds of counters
package de.learnlib.examples;
import java.util.Random;
import de.learnlib.algorithms.lstar.dfa.ClassicLStarDFA;
import de.learnlib.api.algorithm.LearningAlgorithm.DFALearner;
import de.learnlib.api.oracle.EquivalenceOracle.DFAEquivalenceOracle;
import de.learnlib.api.oracle.MembershipOracle.DFAMembershipOracle;
import de.learnlib.filter.cache.dfa.DFACacheOracle;
import de.learnlib.filter.cache.dfa.DFACaches;
import de.learnlib.filter.statistic.oracle.DFACounterOracle;
import de.learnlib.oracle.equivalence.DFARandomWordsEQOracle;
import de.learnlib.oracle.membership.SimulatorOracle.DFASimulatorOracle;
import de.learnlib.util.Experiment.DFAExperiment;
import net.automatalib.automata.fsa.DFA;
import net.automatalib.util.automata.random.RandomAutomata;
import net.automatalib.words.Alphabet;
import net.automatalib.words.impl.Alphabets;
public class StatExample {
public static void main(String[] args) {
final Random random = new Random(42);
final Alphabet<Integer> alphabet = Alphabets.integers(1, 3);
final DFA<?, Integer> dfa = RandomAutomata.randomDFA(random, 20, alphabet);
final DFAMembershipOracle<Integer> oracle = new DFASimulatorOracle<>(dfa);
final DFACounterOracle<Integer> uniqueCounter = new DFACounterOracle<>(oracle, "Unique Queries by Learner");
final DFACacheOracle<Integer> cache = DFACaches.createCache(alphabet, uniqueCounter);
final DFACounterOracle<Integer> mqCounter = new DFACounterOracle<>(cache, "Queries by Learner");
final DFACounterOracle<Integer> eqCounter = new DFACounterOracle<>(oracle, "Queries by EQ oracle");
final DFAEquivalenceOracle<Integer> eqOracle =
new DFARandomWordsEQOracle<>(eqCounter, // use mqCounter for shared number of queries
0, 20, 1000, random);
final DFALearner<Integer> learner = new ClassicLStarDFA<>(alphabet, mqCounter);
final DFAExperiment<Integer> experiment = new DFAExperiment<>(learner, eqOracle, alphabet);
experiment.run();
System.out.println(uniqueCounter.getStatisticalData());
System.out.println(mqCounter.getStatisticalData());
System.out.println(eqCounter.getStatisticalData());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment