source: trunk/quest-core-events/src/de/ugoe/cs/quest/models/HighOrderMarkovModel.java @ 432

Last change on this file since 432 was 432, checked in by sherbold, 12 years ago
  • renamed packages to fir QUEST project structure
  • Property svn:mime-type set to text/plain
File size: 2.2 KB
Line 
1package de.ugoe.cs.quest.models;
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.data.Event;
10
11/**
12 * <p>
13 * Implements high-order Markov models.
14 * </p>
15 *
16 * @author Steffen Herbold
17 * @version 1.0
18 */
19public class HighOrderMarkovModel extends TrieBasedModel {
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 HighOrderMarkovModel with a defined Markov
31         * order.
32         * </p>
33         *
34         * @param maxOrder
35         *            Markov order of the model
36         * @param r
37         *            random number generator used by probabilistic methods of the
38         *            class
39         */
40        public HighOrderMarkovModel(int maxOrder, Random r) {
41                super(maxOrder, r);
42        }
43
44        /**
45         * <p>
46         * Calculates the probability of the next Event being symbol based on the
47         * order of the Markov model. The order is defined in the constructor
48         * {@link #HighOrderMarkovModel(int, Random)}.
49         * </p>
50         *
51         * @see de.ugoe.cs.quest.models.IStochasticProcess#getProbability(java.util.List,
52         *      de.ugoe.cs.quest.data.Event)
53         */
54        @Override
55        public double getProbability(List<? extends Event<?>> context,
56                        Event<?> symbol) {
57                if (context == null) {
58                        throw new InvalidParameterException("context must not be null");
59                }
60                if (symbol == null) {
61                        throw new InvalidParameterException("symbol must not be null");
62                }
63                double result = 0.0d;
64
65                List<Event<?>> contextCopy;
66                if (context.size() >= trieOrder) {
67                        contextCopy = new LinkedList<Event<?>>(context.subList(
68                                        context.size() - trieOrder + 1, context.size()));
69                } else {
70                        contextCopy = new LinkedList<Event<?>>(context);
71                }
72
73                Collection<Event<?>> followers = trie.getFollowingSymbols(contextCopy);
74                int sumCountFollowers = 0; // N(s\sigma')
75                for (Event<?> follower : followers) {
76                        sumCountFollowers += trie.getCount(contextCopy, follower);
77                }
78
79                int countSymbol = trie.getCount(contextCopy, symbol);
80                if (sumCountFollowers != 0) {
81                        result = ((double) countSymbol / sumCountFollowers);
82                }
83
84                return result;
85        }
86
87}
Note: See TracBrowser for help on using the repository browser.