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

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

+ added interface de.ugoe.cs.eventbench.IStochasticProcess

  • Property svn:mime-type set to text/plain
File size: 2.1 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.markov.IncompleteMemory;
9
10public abstract class TrieBasedModel implements IStochasticProcess {
11
12        protected int trieOrder;
13
14        protected abstract double getProbability(List<Event<?>> context, Event<?> symbol);
15
16        protected Trie<Event<?>> trie;
17        protected final Random r;
18
19       
20        public TrieBasedModel(int markovOrder, Random r) {
21                super();
22                this.trieOrder = markovOrder+1;
23                this.r = r;
24        }
25
26        public void train(List<List<Event<?>>> sequences) {
27                trie = new Trie<Event<?>>();
28               
29                for(List<Event<?>> sequence : sequences) {
30                        List<Event<?>> currentSequence = new LinkedList<Event<?>>(sequence); // defensive copy
31                        currentSequence.add(0, Event.STARTEVENT);
32                        currentSequence.add(Event.ENDEVENT);
33                       
34                        trie.train(currentSequence, trieOrder);
35                }
36        }
37
38        /* (non-Javadoc)
39         * @see de.ugoe.cs.eventbench.models.IStochasticProcess#randomSequence()
40         */
41        @Override
42        public List<? extends Event<?>> randomSequence() {
43                List<Event<?>> sequence = new LinkedList<Event<?>>();
44               
45                IncompleteMemory<Event<?>> context = new IncompleteMemory<Event<?>>(trieOrder-1);
46                context.add(Event.STARTEVENT);
47               
48                Event<?> currentState = Event.STARTEVENT;
49               
50                boolean endFound = false;
51               
52                while(!endFound) {
53                        double randVal = r.nextDouble();
54                        double probSum = 0.0;
55                        List<Event<?>> currentContext = context.getLast(trieOrder);
56                        for( Event<?> symbol : trie.getKnownSymbols() ) {
57                                probSum += getProbability(currentContext, symbol);
58                                if( probSum>=randVal ) {
59                                        endFound = (symbol==Event.ENDEVENT);
60                                        if( !(symbol==Event.STARTEVENT || symbol==Event.ENDEVENT) ) {
61                                                // only add the symbol the sequence if it is not START or END
62                                                context.add(symbol);
63                                                currentState = symbol;
64                                                sequence.add(currentState);
65                                        }
66                                        break;
67                                }
68                        }
69                }
70                return sequence;
71        }
72
73        @Override
74        public String toString() {
75                return trie.toString();
76        }
77
78}
Note: See TracBrowser for help on using the repository browser.