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.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.