Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/commands/CMDgenerateFixedLengthSequences.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/commands/CMDgenerateFixedLengthSequences.java	(revision 119)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/commands/CMDgenerateFixedLengthSequences.java	(revision 120)
@@ -2,6 +2,12 @@
 
 import java.security.InvalidParameterException;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.Random;
+import java.util.Set;
 
 import de.ugoe.cs.eventbench.data.Event;
@@ -17,9 +23,19 @@
 		String modelname;
 		String sequencesName;
-		int length;
+		int minLength;
+		int maxLength;
+		boolean all = true;
+		int numSequences = -1;
 		try {
 			modelname = (String) parameters.get(0);
 			sequencesName = (String) parameters.get(1);
-			length = Integer.parseInt((String) parameters.get(2));
+			minLength = Integer.parseInt((String) parameters.get(2));
+			maxLength = Integer.parseInt((String) parameters.get(3));
+			if( parameters.size()>=5 ) {
+				all = Boolean.parseBoolean((String) parameters.get(4));
+			}
+			if( parameters.size()==6 ) {
+				numSequences = Integer.parseInt((String) parameters.get(5)); 
+			}
 		}
 		catch (Exception e) {
@@ -36,8 +52,48 @@
 		} else {
 			model = (IStochasticProcess) dataObject;
-			Collection<List<? extends Event<?>>> sequences = model.generateValidSequences(length+2);
+			Collection<List<? extends Event<?>>> sequences = new LinkedHashSet<List<? extends Event<?>>>();
+			for( int length=minLength; length<maxLength; length++ ) {
+				sequences.addAll(model.generateValidSequences(length+2));
+			}
+			Console.traceln("" + sequences.size() + " possible");
+			if( !all && numSequences<sequences.size() ) {
+				List<Double> probabilities = new ArrayList<Double>(sequences.size());
+				double probSum = 0.0;
+				for( List<? extends Event<?>> sequence : sequences ) {
+					double prob = model.getProbability(sequence);
+					probabilities.add(prob);
+					probSum += prob;
+				}
+				Set<Integer> drawnSequences = new HashSet<Integer>(numSequences);
+				Random r = new Random();
+				while( drawnSequences.size()<numSequences ) {
+					double randVal = r.nextDouble()*probSum;
+					double sum = 0.0d;
+					int index = -1;
+					while( sum<randVal ) {
+						index++;
+						double currentProb = probabilities.get(index);
+						sum += currentProb;
+					}
+					if( !drawnSequences.contains(index) ) {
+						drawnSequences.add(index);
+						probSum -= probabilities.get(index);
+						probabilities.set(index, 0.0d);
+					}
+				}
+				Collection<List<? extends Event<?>>> retainedSequences = new LinkedList<List<? extends Event<?>>>();
+				int index = 0;
+				for( List<? extends Event<?>> sequence : sequences) {
+					if( drawnSequences.contains(index) ) {
+						retainedSequences.add(sequence);
+					}
+					index++;
+				}
+				sequences = retainedSequences;
+			}
 			if( GlobalDataContainer.getInstance().addData(sequencesName, sequences) ) {
 				Console.traceln("Old data \"" + sequencesName + "\" overwritten");
 			}
+			Console.println("" + sequences.size() + " sequences generated");
 		}
 	}
@@ -45,5 +101,5 @@
 	@Override
 	public void help() {
-		Console.println("Usage: generateFixedLengthSequences <modelname> <sequencesName> <length>");
+		Console.println("Usage: generateFixedLengthSequences <modelname> <sequencesName> <length> {<all>} {<numSequences>}");
 	}
 
