source: trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/TrieBasedModel.java @ 70

Last change on this file since 70 was 70, checked in by sherbold, 13 years ago

added getStateStrings() to interface de.ugoe.cs.eventbench.models.IStochasticProcess and implementing classes

  • Property svn:mime-type set to text/plain
File size: 2.6 KB
Line 
1package de.ugoe.cs.eventbench.models;
2
3import java.util.LinkedList;
4import java.util.List;
5import java.util.Random;
6
7import de.ugoe.cs.eventbench.data.Event;
8import de.ugoe.cs.eventbench.models.Trie.Edge;
9import de.ugoe.cs.eventbench.models.Trie.TrieVertex;
10import edu.uci.ics.jung.graph.Tree;
11
12public abstract class TrieBasedModel implements IStochasticProcess {
13
14        protected int trieOrder;
15
16        protected abstract double getProbability(List<Event<?>> context, Event<?> symbol);
17
18        protected Trie<Event<?>> trie;
19        protected final Random r;
20
21       
22        public TrieBasedModel(int markovOrder, Random r) {
23                super();
24                this.trieOrder = markovOrder+1;
25                this.r = r;
26        }
27
28        public void train(List<List<Event<?>>> sequences) {
29                trie = new Trie<Event<?>>();
30               
31                for(List<Event<?>> sequence : sequences) {
32                        List<Event<?>> currentSequence = new LinkedList<Event<?>>(sequence); // defensive copy
33                        currentSequence.add(0, Event.STARTEVENT);
34                        currentSequence.add(Event.ENDEVENT);
35                       
36                        trie.train(currentSequence, trieOrder);
37                }
38        }
39
40        /* (non-Javadoc)
41         * @see de.ugoe.cs.eventbench.models.IStochasticProcess#randomSequence()
42         */
43        @Override
44        public List<? extends Event<?>> randomSequence() {
45                List<Event<?>> sequence = new LinkedList<Event<?>>();
46               
47                IncompleteMemory<Event<?>> context = new IncompleteMemory<Event<?>>(trieOrder-1);
48                context.add(Event.STARTEVENT);
49               
50                Event<?> currentState = Event.STARTEVENT;
51               
52                boolean endFound = false;
53               
54                while(!endFound) {
55                        double randVal = r.nextDouble();
56                        double probSum = 0.0;
57                        List<Event<?>> currentContext = context.getLast(trieOrder);
58                        for( Event<?> symbol : trie.getKnownSymbols() ) {
59                                probSum += getProbability(currentContext, symbol);
60                                if( probSum>=randVal ) {
61                                        endFound = (symbol==Event.ENDEVENT);
62                                        if( !(symbol==Event.STARTEVENT || symbol==Event.ENDEVENT) ) {
63                                                // only add the symbol the sequence if it is not START or END
64                                                context.add(symbol);
65                                                currentState = symbol;
66                                                sequence.add(currentState);
67                                        }
68                                        break;
69                                }
70                        }
71                }
72                return sequence;
73        }
74       
75        public String getTrieDotRepresentation() {
76                return trie.getDotRepresentation();
77        }
78       
79        public Tree<TrieVertex, Edge> getTrieGraph() {
80                return trie.getGraph();
81        }
82
83        @Override
84        public String toString() {
85                return trie.toString();
86        }
87       
88        public int getNumStates() {
89                return trie.getNumSymbols();
90        }
91       
92        public String[] getStateStrings() {
93                String[] stateStrings = new String[getNumStates()];
94                int i=0;
95                for( Event<?> symbol : trie.getKnownSymbols() ) {
96                        stateStrings[i] = symbol.toString();
97                        i++;
98                }
99                return stateStrings;
100        }
101
102}
Note: See TracBrowser for help on using the repository browser.