Changeset 524 for trunk/quest-ui-core/src/main/java/de/ugoe/cs/quest/ui/commands/CMDgenerateHybrid.java
- Timestamp:
- 08/01/12 11:28:16 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/quest-ui-core/src/main/java/de/ugoe/cs/quest/ui/commands/CMDgenerateHybrid.java
r434 r524 2 2 3 3 import java.security.InvalidParameterException; 4 import java.util.ArrayList;5 4 import java.util.Collection; 6 import java.util.LinkedHashSet;7 5 import java.util.LinkedList; 8 6 import java.util.List; 9 import java.util.Random;10 7 11 8 import de.ugoe.cs.quest.CommandHelpers; 12 9 import de.ugoe.cs.quest.eventcore.Event; 10 import de.ugoe.cs.quest.testgeneration.HybridGenerator; 13 11 import de.ugoe.cs.quest.ui.GlobalDataContainer; 14 12 import de.ugoe.cs.quest.usageprofiles.IStochasticProcess; … … 78 76 } 79 77 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 128 82 if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) { 129 83 CommandHelpers.dataOverwritten(sequencesName); 130 84 } 131 85 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 not153 // START154 // or END155 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;168 86 } 169 87
Note: See TracChangeset
for help on using the changeset viewer.