source: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/commands/CMDgenerateRandomSequences.java @ 410

Last change on this file since 410 was 409, checked in by sherbold, 13 years ago
  • sequences generated with the command generateRandomSequences now start with the START symbol and in case validEnd is true, end with the END symbol
  • Property svn:mime-type set to text/plain
File size: 3.1 KB
Line 
1package de.ugoe.cs.eventbench.commands;
2
3import java.security.InvalidParameterException;
4import java.util.HashSet;
5import java.util.List;
6import java.util.Set;
7
8import de.ugoe.cs.eventbench.CommandHelpers;
9import de.ugoe.cs.eventbench.data.GlobalDataContainer;
10import de.ugoe.cs.eventbench.data.Event;
11import de.ugoe.cs.eventbench.models.IStochasticProcess;
12import de.ugoe.cs.util.console.Command;
13import de.ugoe.cs.util.console.Console;
14
15/**
16 * <p>
17 * Command to generate random sessions.
18 * </p>
19 *
20 * @author Steffen Herbold
21 * @version 1.0
22 */
23public class CMDgenerateRandomSequences implements Command {
24
25        /*
26         * (non-Javadoc)
27         *
28         * @see de.ugoe.cs.util.console.Command#run(java.util.List)
29         */
30        @SuppressWarnings("unchecked")
31        @Override
32        public void run(List<Object> parameters) {
33                String modelname;
34                String sequencesName;
35                int numSessions;
36                int minLength = 0;
37                int maxLength = Integer.MAX_VALUE;
38                long maxIter;
39                boolean validEnd = true;
40                try {
41                        modelname = (String) parameters.get(0);
42                        sequencesName = (String) parameters.get(1);
43                        numSessions = Integer.parseInt((String) parameters.get(2));
44                        minLength = Integer.parseInt((String) parameters.get(3));
45                        maxLength = Integer.parseInt((String) parameters.get(4));
46                        maxIter = numSessions * 10;
47                        if (parameters.size() >= 5) {
48                                maxIter = Long.parseLong((String) parameters.get(5));
49                        }
50                        if (parameters.size() >= 6) {
51                                validEnd = Boolean.parseBoolean((String) parameters.get(6));
52                        }
53                } catch (Exception e) {
54                        throw new InvalidParameterException();
55                }
56
57                IStochasticProcess model = null;
58                Object dataObject = GlobalDataContainer.getInstance()
59                                .getData(modelname);
60                if (dataObject == null) {
61                        CommandHelpers.objectNotFoundMessage(modelname);
62                        return;
63                }
64                if (!(dataObject instanceof IStochasticProcess)) {
65                        CommandHelpers.objectNotType(modelname, "IStochasticProcess");
66                        return;
67                }
68                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                }
85                if (sequences.size() < numSessions) {
86                        Console.println("Only " + sequences.size()
87                                        + " unique sessions generated after " + maxIter
88                                        + " iterations");
89                }
90                if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) {
91                        CommandHelpers.dataOverwritten(sequencesName);
92                }
93        }
94
95        /*
96         * (non-Javadoc)
97         *
98         * @see de.ugoe.cs.util.console.Command#help()
99         */
100        @Override
101        public void help() {
102                Console.println("Usage: generateRandomSequenecs <modelName> <sequencesName> <numSessions> <minLength> <maxLength> {<maxIter>} {<validEnd>}");
103        }
104
105}
Note: See TracBrowser for help on using the repository browser.