diff --git a/learnlib/RFSALearnAndCompare.java b/learnlib/RFSALearnAndCompare.java index 97e1b5b57b17f9d9e97b1a0335b2f4c6e57344db..8e5931a956ea853946346503fb937e81291f1a25 100644 --- a/learnlib/RFSALearnAndCompare.java +++ b/learnlib/RFSALearnAndCompare.java @@ -14,6 +14,7 @@ public class RFSALearnAndCompare<I> { CompactNFA<I> target; Experiment<NFA<?,I>> experiment, experiment2; + CounterOracle<I, Boolean> mqOracle, mqOracle2; public RFSALearnAndCompare() { @@ -31,11 +32,14 @@ public class RFSALearnAndCompare<I> { public void learn(int maxLength, int maxTests) { SimulatorOracle<I, Boolean> sul = new SimulatorOracle<>(target); SimulatorOracle<I, Boolean> sul2 = new MySimulatorOracle<>(target); + + mqOracle = new CounterOracle<>(sul, "membership queries learning"); + mqOracle2 = new CounterOracle<>(sul2, "membership queries learning"); NLStarLearner<I> nlstar = new NLStarLearnerBuilder<I>().withAlphabet(target.getInputAlphabet()) // input alphabet - .withOracle(sul) // membership oracle + .withOracle(mqOracle) // membership oracle .create(); NLStarLearner<I> nlstar2 = new NLStarLearnerBuilder<I>().withAlphabet(target.getInputAlphabet()) // input alphabet - .withOracle(sul2) // reverse membership oracle + .withOracle(mqOracle2) // reverse membership oracle .create(); RandomWordsEQOracle<NFA<?, I>, I, Boolean> eqOracle = new RandomWordsEQOracle<>(sul, 0, maxLength, maxTests); RandomWordsEQOracle<NFA<?, I>, I, Boolean> eqOracle2 = new RandomWordsEQOracle<>(sul2, 0, maxLength, maxTests); diff --git a/learnlib/TimbukParser.java b/learnlib/TimbukParser.java index d9d968569b11a05295ee1f60b2b6c90db02d93e9..a69a36e335f758f10fb57f7d18d5c1053a324f55 100644 --- a/learnlib/TimbukParser.java +++ b/learnlib/TimbukParser.java @@ -1,4 +1,5 @@ import com.google.common.collect.Lists; +import net.automatalib.automata.fsa.NFA; import net.automatalib.automata.fsa.impl.compact.CompactNFA; import net.automatalib.util.automata.builders.FSABuilder; import net.automatalib.visualization.Visualization; @@ -66,4 +67,25 @@ public class TimbukParser { return builder.create(); } + + public static void main(String[] args) throws IOException { + TimbukParser parser = new TimbukParser(Paths.get(args[0])); + + CompactNFA<String> nfa = parser.createNFA(); + + RFSALearnAndCompare<String> learnAndCompare = new RFSALearnAndCompare<>(); + learnAndCompare.setTarget(nfa); + + int maxTests = (int) Math.pow(learnAndCompare.target.getStates().size()*learnAndCompare.target.getInputAlphabet().size(), 2)*10*3*2+250000; // FIXME or beter equivalence oracle + System.out.println(maxTests); + learnAndCompare.learn(3*learnAndCompare.target.getStates().size(), maxTests); + + NFA<?, String> result = learnAndCompare.experiment.getFinalHypothesis(); + NFA<?, String> result2 = learnAndCompare.experiment2.getFinalHypothesis(); + + Visualization.visualize(result, learnAndCompare.target.getInputAlphabet()); + Visualization.visualize(result2, learnAndCompare.target.getInputAlphabet()); + + System.out.println(args[0] + "," + nfa.getStates().size() + "," + result.size() + "," + learnAndCompare.experiment.getRounds().getCount() + "," + learnAndCompare.mqOracle.getCounter().getCount() + "," + result2.size() + "," + learnAndCompare.experiment2.getRounds().getCount() + "," + learnAndCompare.mqOracle2.getCounter().getCount()); + } }