Ignore:
Timestamp:
08/01/12 11:28:16 (12 years ago)
Author:
sherbold
Message:
  • the commands generateFixedLengthSequences, generateHybrid, and generateRandomSequences now quest-core-testgeneration for the generation of test suites instead of local implementations.
Location:
trunk/quest-ui-core/src/main/java/de/ugoe/cs/quest/ui/commands
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/quest-ui-core/src/main/java/de/ugoe/cs/quest/ui/commands/CMDgenerateFixedLengthSequences.java

    r434 r524  
    22 
    33import java.security.InvalidParameterException; 
    4 import java.util.ArrayList; 
    54import java.util.Collection; 
    6 import java.util.HashSet; 
    7 import java.util.LinkedHashSet; 
    8 import java.util.LinkedList; 
    95import java.util.List; 
    10 import java.util.Random; 
    11 import java.util.Set; 
    126 
    137import de.ugoe.cs.quest.CommandHelpers; 
    148import de.ugoe.cs.quest.eventcore.Event; 
     9import de.ugoe.cs.quest.testgeneration.DrawFromAllSequencesGenerator; 
    1510import de.ugoe.cs.quest.ui.GlobalDataContainer; 
    1611import de.ugoe.cs.quest.usageprofiles.IStochasticProcess; 
     
    7166                } 
    7267                model = (IStochasticProcess) dataObject; 
    73                 Collection<List<? extends Event<?>>> sequences = new LinkedHashSet<List<? extends Event<?>>>(); 
    74                 for (int length = minLength; length <= maxLength; length++) { 
    75                         if( validEnd ) { 
    76                                 sequences.addAll(model.generateValidSequences(length + 2)); 
    77                         } else { 
    78                                 sequences.addAll(model.generateSequences(length + 1, true)); 
    79                         } 
    80                 } 
    81                 Console.traceln("" + sequences.size() + " possible"); 
    82                 if (!all && numSequences < sequences.size()) { 
    83                         List<Double> probabilities = new ArrayList<Double>(sequences.size()); 
    84                         double probSum = 0.0; 
    85                         for (List<? extends Event<?>> sequence : sequences) { 
    86                                 double prob = model.getProbability(sequence); 
    87                                 probabilities.add(prob); 
    88                                 probSum += prob; 
    89                         } 
    90                         Set<Integer> drawnSequences = new HashSet<Integer>(numSequences); 
    91                         Random r = new Random(); 
    92                         while (drawnSequences.size() < numSequences) { 
    93                                 double randVal = r.nextDouble() * probSum; 
    94                                 double sum = 0.0d; 
    95                                 int index = -1; 
    96                                 while (sum < randVal) { 
    97                                         index++; 
    98                                         double currentProb = probabilities.get(index); 
    99                                         sum += currentProb; 
    100                                 } 
    101                                 if (!drawnSequences.contains(index)) { 
    102                                         drawnSequences.add(index); 
    103                                         probSum -= probabilities.get(index); 
    104                                         probabilities.set(index, 0.0d); 
    105                                 } 
    106                         } 
    107                         Collection<List<? extends Event<?>>> retainedSequences = new LinkedList<List<? extends Event<?>>>(); 
    108                         int index = 0; 
    109                         for (List<? extends Event<?>> sequence : sequences) { 
    110                                 if (drawnSequences.contains(index)) { 
    111                                         retainedSequences.add(sequence); 
    112                                 } 
    113                                 index++; 
    114                         } 
    115                         sequences = retainedSequences; 
    116                 } 
     68                DrawFromAllSequencesGenerator generator = new DrawFromAllSequencesGenerator( 
     69                                numSequences, minLength, maxLength, validEnd, all); 
     70                Collection<List<? extends Event<?>>> sequences = generator 
     71                                .generateTestSuite(model); 
     72 
    11773                if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) { 
    11874                        CommandHelpers.dataOverwritten(sequencesName); 
  • trunk/quest-ui-core/src/main/java/de/ugoe/cs/quest/ui/commands/CMDgenerateHybrid.java

    r434 r524  
    22 
    33import java.security.InvalidParameterException; 
    4 import java.util.ArrayList; 
    54import java.util.Collection; 
    6 import java.util.LinkedHashSet; 
    75import java.util.LinkedList; 
    86import java.util.List; 
    9 import java.util.Random; 
    107 
    118import de.ugoe.cs.quest.CommandHelpers; 
    129import de.ugoe.cs.quest.eventcore.Event; 
     10import de.ugoe.cs.quest.testgeneration.HybridGenerator; 
    1311import de.ugoe.cs.quest.ui.GlobalDataContainer; 
    1412import de.ugoe.cs.quest.usageprofiles.IStochasticProcess; 
     
    7876                } 
    7977                model = (IStochasticProcess) dataObject; 
    80                 Collection<List<? extends Event<?>>> sequences = new LinkedHashSet<List<? extends Event<?>>>(); 
    81  
    82                 List<List<? extends Event<?>>> seqsTmp = new ArrayList<List<? extends Event<?>>>( 
    83                                 model.generateSequences(maxLengthAll + 1, true)); 
    84  
    85                 Console.traceln("" + seqsTmp.size() + " of length " + maxLengthAll 
    86                                 + " possible"); 
    87                 List<Double> probabilities = new ArrayList<Double>(seqsTmp.size()); 
    88                 double probSum = 0.0; 
    89                 for (List<? extends Event<?>> sequence : seqsTmp) { 
    90                         double prob = model.getProbability(sequence); 
    91                         probabilities.add(prob); 
    92                         probSum += prob; 
    93                 } 
    94  
    95                 Random r = new Random(); 
    96                 int j = 0; 
    97                 while (sequences.size() < numSequences && j <= numSequences * 100) { 
    98                         j++; 
    99                         double randVal = r.nextDouble() * probSum; 
    100                         double sum = 0.0d; 
    101                         int index = -1; 
    102                         while (sum < randVal) { 
    103                                 index++; 
    104                                 double currentProb = probabilities.get(index); 
    105                                 sum += currentProb; 
    106                         } 
    107                         List<? extends Event<?>> seqTmp = seqsTmp.get(index); 
    108                         if (!Event.ENDEVENT.equals(seqTmp.get(seqTmp.size() - 1))) { 
    109                                 List<? extends Event<?>> sequence; 
    110                                 if (validEnd) { 
    111                                         sequence = finishSequence(seqTmp, model, length + 2, 
    112                                                         validEnd); 
    113                                         if( sequence!= null && sequence.size()!=length+2 ) { 
    114                                                 sequence = null; 
    115                                         } 
    116                                 } else { 
    117                                         sequence = finishSequence(seqTmp, model, length + 1, 
    118                                                         validEnd); 
    119                                         if( sequence!= null && sequence.size()!=length+1 ) { 
    120                                                 sequence = null; 
    121                                         } 
    122                                 } 
    123                                 if( sequence!=null ) { 
    124                                         sequences.add(sequence); 
    125                                 } 
    126                         } 
    127                 } 
     78                 
     79                HybridGenerator generator = new HybridGenerator(numSequences, length, maxLengthAll, validEnd); 
     80                Collection<List<? extends Event<?>>> sequences = generator.generateTestSuite(model); 
     81                 
    12882                if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) { 
    12983                        CommandHelpers.dataOverwritten(sequencesName); 
    13084                } 
    13185                Console.println("" + sequences.size() + " sequences generated"); 
    132         } 
    133  
    134         public List<? extends Event<?>> finishSequence( 
    135                         List<? extends Event<?>> sequence, IStochasticProcess model, 
    136                         int maxLength, boolean validEnd) { 
    137                 Random r = new Random(); 
    138                 boolean endFound = false; 
    139                 List<Event<?>> sequenceCopy = new LinkedList<Event<?>>(sequence); 
    140                 final int maxIter = 30000; 
    141                 int iter = 0; 
    142                 while (!endFound && iter<maxIter) { 
    143                         iter++; 
    144                         sequenceCopy = new LinkedList<Event<?>>(sequence); 
    145                         while (!endFound && sequenceCopy.size() <= maxLength) { 
    146                                 double randVal = r.nextDouble(); 
    147                                 double probSum = 0.0; 
    148                                 for (Event<?> symbol : model.getEvents()) { 
    149                                         probSum += model.getProbability(sequenceCopy, symbol); 
    150                                         if (probSum >= randVal) { 
    151                                                 if (!(Event.STARTEVENT.equals(symbol) || (!validEnd && Event.ENDEVENT.equals(symbol)))) { 
    152                                                         // only add the symbol the sequence if it is not 
    153                                                         // START 
    154                                                         // or END 
    155                                                         sequenceCopy.add(symbol); 
    156                                                 } 
    157                                                 endFound = Event.ENDEVENT.equals(symbol) 
    158                                                                 || (!validEnd && sequenceCopy.size() == maxLength); 
    159                                                 break; 
    160                                         } 
    161                                 } 
    162                         } 
    163                 } 
    164                 if( iter==maxIter ) { 
    165                         return null; 
    166                 } 
    167                 return sequenceCopy; 
    16886        } 
    16987 
  • trunk/quest-ui-core/src/main/java/de/ugoe/cs/quest/ui/commands/CMDgenerateRandomSequences.java

    r434 r524  
    22 
    33import java.security.InvalidParameterException; 
    4 import java.util.HashSet; 
     4import java.util.Collection; 
    55import java.util.List; 
    6 import java.util.Set; 
    76 
    87import de.ugoe.cs.quest.CommandHelpers; 
    98import de.ugoe.cs.quest.eventcore.Event; 
     9import de.ugoe.cs.quest.testgeneration.RandomWalkGenerator; 
    1010import de.ugoe.cs.quest.ui.GlobalDataContainer; 
    1111import de.ugoe.cs.quest.usageprofiles.IStochasticProcess; 
     
    2828         * @see de.ugoe.cs.util.console.Command#run(java.util.List) 
    2929         */ 
    30         @SuppressWarnings("unchecked") 
    3130        @Override 
    3231        public void run(List<Object> parameters) { 
     
    6766                } 
    6867                model = (IStochasticProcess) dataObject; 
    69                 Set<List<? extends Event<?>>> sequences = new HashSet<List<? extends Event<?>>>( 
    70                                 numSessions); 
    71                 long numIterations = 0; 
    72                 while (sequences.size() < numSessions && numIterations < maxIter) { 
    73                         List<? extends Event<?>> generatedSequence = model.randomSequence( 
    74                                         maxLength, validEnd); 
    75                         if (generatedSequence.size() >= minLength 
    76                                         && generatedSequence.size() <= maxLength) { 
    77                                 ((List<Event<?>>) generatedSequence).add(0, Event.STARTEVENT); 
    78                                 if( validEnd ) { 
    79                                         ((List<Event<?>>) generatedSequence).add(Event.ENDEVENT); 
    80                                 } 
    81                                 sequences.add(generatedSequence); 
    82                         } 
    83                         numIterations++; 
    84                 } 
     68 
     69                RandomWalkGenerator generator = new RandomWalkGenerator(numSessions, 
     70                                minLength, maxLength, validEnd, maxIter); 
     71                Collection<List<? extends Event<?>>> sequences = generator 
     72                                .generateTestSuite(model); 
     73 
    8574                if (sequences.size() < numSessions) { 
    8675                        Console.println("Only " + sequences.size() 
     
    8877                                        + " iterations"); 
    8978                } 
     79 
    9080                if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) { 
    9181                        CommandHelpers.dataOverwritten(sequencesName); 
Note: See TracChangeset for help on using the changeset viewer.