source: trunk/quest-core-events/src/de/ugoe/cs/quest/usageprofiles/DeterministicFiniteAutomaton.java @ 433

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