werkende main voor candylearner
authorMart Lubbers <mart@martlubbers.net>
Wed, 20 Jan 2016 11:33:01 +0000 (12:33 +0100)
committerMart Lubbers <mart@martlubbers.net>
Wed, 20 Jan 2016 11:33:01 +0000 (12:33 +0100)
a4/code/src/learner/CandyLearner.java [deleted file]
a4/code/src/learner/Main.java

diff --git a/a4/code/src/learner/CandyLearner.java b/a4/code/src/learner/CandyLearner.java
deleted file mode 100644 (file)
index 400d6e5..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-package learner;
-
-import java.io.BufferedReader;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-import net.automatalib.automata.transout.MealyMachine;
-import net.automatalib.util.graphs.dot.GraphDOT;
-import net.automatalib.words.Alphabet;
-import net.automatalib.words.Word;
-import net.automatalib.words.impl.SimpleAlphabet;
-import de.learnlib.algorithms.lstargeneric.ce.ObservationTableCEXHandlers;
-import de.learnlib.algorithms.lstargeneric.closing.ClosingStrategies;
-import de.learnlib.algorithms.lstargeneric.mealy.ExtensibleLStarMealy;
-import de.learnlib.api.LearningAlgorithm.MealyLearner;
-import de.learnlib.api.SUL;
-import de.learnlib.cache.Caches;
-import de.learnlib.eqtests.basic.CompleteExplorationEQOracle;
-import de.learnlib.eqtests.basic.RandomWordsEQOracle;
-import de.learnlib.eqtests.basic.WMethodEQOracle.MealyWMethodEQOracle;
-import de.learnlib.experiments.Experiment.MealyExperiment;
-import de.learnlib.oracles.ResetCounterSUL;
-import de.learnlib.oracles.SULOracle;
-import de.learnlib.statistics.SimpleProfiler;
-import de.learnlib.statistics.StatisticSUL;
-
-
-public class CandyLearner {
-
-       public static int sutInterface_portNumber=7892;
-
-       /*
-        * The Adapter: needed in order to let LearnLib and the sut to communicate 
-        * 
-        */
-       public static class SULAdapter implements SUL<String, String> {
-
-       // system under learning
-       private SutSocketWrapper sul = new SutSocketWrapper(sutInterface_portNumber);
-
-       @Override
-       public void pre(){
-               System.out.println("pre");
-       }
-
-       @Override
-       public void post(){
-               System.out.println("post");
-       }
-
-       // // reset the SUL
-       // @Override
-       // public void reset() {
-       //      sul.sendReset();
-       // }
-
-       // execute one input on the SUL
-       @Override
-       public String step(String in) {
-               String output = sul.sendInput(in);
-               //System.out.println(in + ":" + output);
-               return output;
-       }
-       }
-
-       public static void main(String[] args) 
-               throws NoSuchMethodException, IOException {
-
-               // create alphabet
-               Alphabet<String> inputs = new SimpleAlphabet<>();
-               inputs.add("IREFUND");
-               inputs.add("IBUTTONMARS");
-               inputs.add("IBUTTONSNICKERS");
-               inputs.add("IBUTTONBOUNTY");
-               inputs.add("ICOIN10");
-               inputs.add("ICOIN5");
-
-               // Instantiate the sut
-               SUL<String,String> sul = new SULAdapter();
-
-               // oracle for counting queries wraps sul
-               StatisticSUL<String, String> statisticSul =
-                       new ResetCounterSUL<>("membership queries", sul);
-
-               SUL<String,String> effectiveSul = statisticSul;
-               // use caching in order to avoid duplicate queries
-               effectiveSul = Caches.createSULCache(inputs, effectiveSul);
-
-               SULOracle<String, String> mqOracle = new SULOracle<>(effectiveSul);
-
-               // create initial set of suffixes
-               List<Word<String>> suffixes = new ArrayList<>();
-               suffixes.add(Word.fromSymbols("IREFUND"));
-               suffixes.add(Word.fromSymbols("IBUTTONMARS"));
-               suffixes.add(Word.fromSymbols("IBUTTONSNICKERS"));
-               suffixes.add(Word.fromSymbols("IBUTTONBOUNTY"));
-               suffixes.add(Word.fromSymbols("ICOIN10"));
-               suffixes.add(Word.fromSymbols("ICOIN5"));
-
-               // construct L* instance (almost classic Mealy version)
-               // almost: we use words (Word<String>) in cells of the table 
-               // instead of single outputs.
-               MealyLearner<String,String> lstar =
-                       new ExtensibleLStarMealy<>(
-                               inputs, // input alphabet
-                               mqOracle, // mq oracle
-                               suffixes, // initial suffixes
-                               // handling of counterexamples
-                               ObservationTableCEXHandlers.FIND_LINEAR_ALLSUFFIXES,
-                               // choose row for closing the table
-                               ClosingStrategies.CLOSE_SHORTEST
-                               );
-
-               // create random words equivalence test
-               RandomWordsEQOracle<
-                 String, Word<String>, MealyMachine<?,String,?,String>> randomWords =
-                       new RandomWordsEQOracle<
-                                       String, Word<String>, MealyMachine<?,String,?,String>>(
-                               mqOracle, 
-                               3, // int minLength
-                               8,      // int maxLength
-                               1000,   // int maxTests
-                               new Random(46346293) // make results reproducible
-                               );
-
-               // create complete exploration equivalence test
-               CompleteExplorationEQOracle<String, Word<String>> completeOracle =
-                       new CompleteExplorationEQOracle<>(
-                               mqOracle, // a membership oracle
-                               5, // int minDepth
-                               7       // int maxDepth
-                               ); 
-
-               // create equivalence oracle based on the W method
-               MealyWMethodEQOracle<String, String> wOracle=
-                       new MealyWMethodEQOracle<>(
-                               5, //int maxDepth
-                               mqOracle        // a membership oracle
-                               ); 
-
-
-               // construct a learning experiment from
-               // the learning algorithm and one of the equivalence oracles.
-               // The experiment will execute the main loop of
-               // active learning
-               MealyExperiment<String,String> experiment =
-                       new MealyExperiment<>(
-                               lstar,
-                               // equivalence oracle, choose among 
-                               // [randomWords | completeOracle | wOracle] 
-                               // **remember to change their settings**
-                               //randomWords, 
-                               completeOracle, 
-                               inputs // input alphabet
-                               );
-
-               // turn off time profiling
-               experiment.setProfile(true);
-
-               // enable logging of models
-               experiment.setLogModels(true);
-
-               // run experiment
-               experiment.run();
-
-               // get learned model
-               MealyMachine<?, String, ?, String> result =
-                       experiment.getFinalHypothesis();
-
-               // report results
-               System.out.println("------------------------------------------------");
-
-               // profiling
-               System.out.println(SimpleProfiler.getResults());
-
-               // learning statistics
-               System.out.println(experiment.getRounds().getSummary());
-               System.out.println(statisticSul.getStatisticalData().getSummary());
-
-               // model statistics
-               System.out.println("States: " + result.size());
-               System.out.println("Sigma: " + inputs.size());
-
-               // show model
-               System.out.println();
-               System.out.println("Model: ");
-
-               GraphDOT.write(result, inputs, System.out); // may throw IOException!
-               //Writer w = DOT.createDotWriter(true);
-               //GraphDOT.write(result, inputs, w);
-               //w.close();
-
-               String filename = "CandyMachine.dot";
-               PrintStream writer = new PrintStream(
-                       new FileOutputStream(filename)); 
-               GraphDOT.write(result, inputs, writer); // may throw IOException!
-
-               System.out.println(executeCommand(
-                       "dot -Tpdf /path/to/yourfolder/CandyMachine.dot " +
-                       "-o /path/to/yourfolder/CandyMachine.pdf"));
-
-               System.out.println("------------------------------------------------");
-       }
-
-       // execute command, for translation from dot to pdf 
-       public static String executeCommand(String command) {
-               StringBuffer output = new StringBuffer();
-
-               Process p;
-               try {
-                       p = Runtime.getRuntime().exec(command);
-                       p.waitFor();
-                       BufferedReader reader = 
-                       new BufferedReader(new InputStreamReader(p.getInputStream()));
-
-                       String line = "";
-                       while ((line = reader.readLine())!= null) {
-                       output.append(line + "\n");
-                       }
-
-               } catch (Exception e) {
-                       e.printStackTrace();
-               }
-
-               return output.toString();
-       }
-}
index 160b34e..9b3718a 100644 (file)
@@ -54,15 +54,20 @@ public class Main {
        //*****************//
        // Defines the input alphabet, adapt for your socket (you can even use other types than string, if you 
        // change the generic-values, e.g. make your SUL of type SUL<Integer, Float> for int-input and float-output
-       private static final Alphabet<String> inputAlphabet = new SimpleAlphabet<String>(ImmutableSet.of("a", "b", "c"));       
+       private static final Alphabet<String> inputAlphabet =
+               new SimpleAlphabet<String>(ImmutableSet.of(
+                                       "IREFUND", "IBUTTONMARS", "IBUTTONSNICKERS",
+                                       "IBUTTONBOUNTY", "ICOIN10", "ICOIN5")); 
        // There are two SULs predefined, an example (see ExampleSul.java) and a socket SUL which connects to the SUL over socket
-       private static final SULType sulType = SULType.Example;
+       private static final SULType sulType = SULType.Socket;
        public enum SULType { Example, Socket }
        // For SULs over socket, the socket address/port can be set here
        private static final InetAddress socketIp = InetAddress.getLoopbackAddress();
-       private static final int socketPort = 7890;
+//     private static final int socketPort = 7890;
+       private static final int socketPort = 7892;
        private static final boolean printNewLineAfterEveryInput = true; // print newlines in the socket connection
-       private static final String resetCmd = "RESET"; // the command to send over socket to reset sut
+//     private static final String resetCmd = "RESET"; // the command to send over socket to reset sut
+       private static final String resetCmd = "reset"; // the command to send over socket to reset sut
        
        //*******************//
        // Learning settings //