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

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