source: trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/DeterministicFiniteAutomaton.java @ 101

Last change on this file since 101 was 101, checked in by sherbold, 13 years ago
  • code documentation
  • Property svn:mime-type set to text/plain
File size: 1.8 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;
8
9/**
10 * <p>
11 * Implements a Deterministic Finite Automata (DFA) capable of random session
12 * generation. It is a special case of a first-order Markov model, where the
13 * transition probability is equally high for all following states.
14 * </p>
15 *
16 * @author Steffen Herbold
17 * @version 1.0
18 */
19public class DeterministicFiniteAutomaton extends FirstOrderMarkovModel {
20
21        /**
22         * <p>
23         * Id for object serialization.
24         * </p>
25         */
26        private static final long serialVersionUID = 1L;
27
28        /**
29         * <p>
30         * Constructor. Creates a new DeterministicFiniteAutomaton.
31         * </p>
32         *
33         * @param r
34         *            random number generator used by probabilistic methods of the
35         *            class
36         */
37        public DeterministicFiniteAutomaton(Random r) {
38                super(r);
39        }
40
41        /**
42         * <p>
43         * Calculates the proability of the next state. Each of the following states
44         * in the automaton is equally probable.
45         * </p>
46         *
47         * @see de.ugoe.cs.eventbench.models.IStochasticProcess#getProbability(java.util.List,
48         *      de.ugoe.cs.eventbench.data.Event)
49         */
50        @Override
51        public double getProbability(List<? extends Event<?>> context,
52                        Event<?> symbol) {
53                double result = 0.0d;
54
55                List<Event<?>> contextCopy;
56                if (context.size() >= trieOrder) {
57                        contextCopy = new LinkedList<Event<?>>(context.subList(
58                                        context.size() - trieOrder + 1, context.size()));
59                } else {
60                        contextCopy = new LinkedList<Event<?>>(context);
61                }
62
63                List<Event<?>> followers = trie.getFollowingSymbols(contextCopy);
64
65                if (followers.size() != 0 && followers.contains(symbol)) {
66                        result = 1.0d / followers.size();
67                }
68
69                return result;
70        }
71
72}
Note: See TracBrowser for help on using the repository browser.