<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Efficient Mobility Pattern Stream Matching on Mobile Devices</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Simona-Claudia Florescu</string-name>
          <email>orescu@gmail.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Michael Mock</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Michael May</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Christine K o ̈rner</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Fraunhofer Institute for Intelligent Analysis and Information</institution>
        </aff>
      </contrib-group>
      <fpage>23</fpage>
      <lpage>27</lpage>
      <abstract>
        <p>The increasing amount of mobile phones that are equipped with localization technology offers a great opportunity for the collection of mobility data. This data can be used for detecting mobility patterns. Matching mobility patterns in streams of spatiotemporal events implies a trade-off between efficiency and pattern complexity. Existing work deals either with low expressive patterns, which can be evaluated efficiently, or with very complex patterns on powerful machines. We propose an approach which solves the trade-off and is able to match flexible and sufficiently complex patterns while delivering a good performance on a resource-constrained mobile device. The supported patterns include full regular expressions as well as relative and absolute time constraints. We present the definition of our pattern language and the implementation and performance evaluation of the pattern matching on a mobile device, using a hierarchy of filters which continuously process the GPS input stream.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>INTRODUCTION</title>
      <p>
        The analysis of mobility behavior based on GPS-tracks has become
a popular field of research [
        <xref ref-type="bibr" rid="ref15 ref16 ref18 ref4 ref7">15, 7, 4, 16, 18</xref>
        ]. In the context of the
European LIFT [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] project, we aim at the on-line monitoring of
global non-linear phenomena from massively distributed streams of
data. In the mobility domain such global phenomena are, for
example, mass events or changes in traffic flows. The basic approach of
LIFT technology for the reduction of communication overhead is to
build local mobility models on each device and to communicate only
significant changes to a central coordinator, which is computing the
global model. This paper presents an approach for building the local
mobility model efficiently on a mobile device.
      </p>
      <p>
        Mobility patterns such as used in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] and [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] are an appropriate
way of modeling spatio-temporal mobility behavior. Powerful
specialized database systems such as [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] allow to retrieve patterns from
spatio-temporal data using complex pattern queries, in which
spatial and temporal conditions can be freely combined. Providing this
flexibility for pattern definitions for building local mobility models
on a mobile device would surely exceed the computational power
of such devices. Patterns expressed by regular expressions only, but
not supporting queries over travel times (as in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]) might have a
better chance of being efficiently implemented on a mobile device. The
same holds for the work of [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], which allows queries over travel times
but supports sequential patterns only. Our approach of building
mobility models is based on the notion of visits as being formally
introduced in [
        <xref ref-type="bibr" rid="ref11 ref12">12, 11</xref>
        ]. Patterns are build as regular expression over visits,
and time constraints are applied to complete patterns. For
achieving an efficient implementation on the mobile device, we spread the
task of pattern matching over a filter hierarchy that is fed with the
stream of GPS input data: Firstly, a VisitEventFilter detects whether
a certain location is being visited and, if so, forwards a visit event to a
PatternFilter, which can handle arbitrary regular expressions
(including Kleene closure) over visit events. Lastly, a TimeConstraintFilter
is used to check any expression over the travel time for the
complete pattern. By this approach, we can use standard deterministic
automatons for implementing matching of regular expressions and
can perform efficient time constraint checking in constant time. The
remainder of this paper is structured as follows: in the next section,
we present our approach, mobility pattern matching over streams
containing the pattern definition language and details of the
implementation of the pattern matching algorithm. Section 3 contains the
performance and scalability evaluation and Section 4 discusses
related work. The last section, conclusions, provides a short summary,
improvement suggestions and future work.
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>MOBILITY PATTERN MATCHING</title>
      <p>
        Figure 1 describes our general approach for building local and global
mobility models. As described in [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], our mobility model is based
on counts of occurrences of events, whereby an event represents the
occurrence of a specific predefined spatio-temporal behavior in the
observed GPS track. The local mobility model represents the
behavior of a specific user and is locally computed on the device itself,
whereas the global model is build by aggregating all local models
on a single node (global coordinator). LIFT technology is used to
reduce the amount of communication needed for maintaining the
global model correct over time. The basic approach thereby is to
define a so-called SafeZone, in which the local model can safely vary
without notifying the global coordinator [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. In this paper, we
focus on the question whether the input for generating the local model
can be computed efficiently on a mobile device, i.e., the gray shaded
part in Figure 1. Being able to compute a model locally is a
prerequisite for applying LIFT technology for communication reduction. The
local mobility model is computed by processing the stream of GPS
updates as provided by an Android Location Provider through a
hierarchy of filters (see [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] for the details of filter interface definitions).
At the first level, theVisitEventFilter detects whether the device stays
for a pre-defined minimum time in one of the pre-defined locations,
which are stored in the local location database. If so, a visit event
is generated, which will be processed at the next layer in the
hierarchy, the PatternFilter. This Filter takes list of predefined patterns
(regular expressions over visits) as input and matches the incoming
visit events against these patterns. In case of a match, a pattern event
is forwarded to the next filter. At the last filter level,
theTimeConstraintFilter, the time constraints for the matched pattern are
validated. If they are fulfilled, the respective pattern frequency count is
increased. The input for our implementation consists therefore of:
(1) an infinite stream of GPS-sensed location updates, (2) a given set
of interesting locations to be monitored, (3) a set of patterns with the
set of interesting locations as domain, as depicted in the figure below,
Figure 1.
      </p>
      <p>Mobile Device with Android OS</p>
      <p>Pattern &amp;
TimeConstra
int Definition
Location
Definition
Database</p>
      <p>LIFT Local Mobility Model Change notification</p>
      <p>Matched TimePattern
TimeConstraintFilter</p>
      <p>PatternEvent
PatternFilter</p>
      <p>VisitEvent
VisitEventFilter</p>
      <p>GPS Update
Android Location Provider</p>
      <sec id="sec-2-1">
        <title>LIFT Global Coordinator</title>
      </sec>
      <sec id="sec-2-2">
        <title>Global Mobility Model</title>
        <p>We propose a pattern language based on regular expressions. We
define the language for the three main levels of our approach:
VisitEventFilter, PatternFilter and TimeConstraintFilter.</p>
        <p>Firstly, we define a location, of which the input data for the
VisitEventFilter consists. A location is defined by anid, a type, a spatial
extend and the minimum stay time at the location. Note that this
definition allows for overlapping locations (for example: a location for
a specific attraction inside the location ”Amusement Park”) as well
as for monitoring complete regions by dividing a region in a
spatial grid of locations. In our implementation we consider rectangular
spatial shapes, therefore we define the four coordinates of the
bounding boxes. The id is a unique identification for the location and the
type of location (e.g. cinema, fast-food, school) is coded for
shortness purposes with two digits. The minimum stay time defines the
time period that an encounter with a location must last in order to
become a visit.2 A location is defined as:
location := id, type, xmin, xmax, ymin, ymax, minStay
(1)</p>
        <p>We represent a visit event, generated by the VisitEventFilter with
the following attributes: location identification, location type, entry
and exit time (in milliseconds):
2 Both the bounding box radius and minimum stay time are defined
application-depend, depending on the location type (e.g. for bigger
locations we set the minimum stay time higher) in order to distinguish between
passing by and visiting.
visitEvent := (id, type, entryT ime, exitT ime)</p>
        <p>We define a visitExpression as being the concatenation of the id,
type and the stayTime using the within separator ”,”:
visitExpression := concat(id, type, stayT ime, sep = ”, ”)
(3)</p>
        <p>
          The stay time is the difference between the exit and entry time.
Similarly to [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] it is expressed as a sequence of repeated time units t
so that it can be matched by regular expressions. This enables pattern
queries like ”a stay time of at least 5 and at most 20 minutes”. The
duration of a time unit depends on the required accuracy and can be
set to e.g. one minute. An example of a visit expression is: 1,01,tttt
which represents a visit event with location 1, of type 01 (here code
for cinema) and a stay time of 4 time units.
        </p>
        <p>
          A pattern consists of (1) a regular expression of one or several
visitExpressions and (2) a timeConstraint - containing absolute and
relative constraints:
pattern := (regex(visitExpression+), timeConstraint) (4)
timeConstraint := ([fexit], [opf ], [lentry], [opl], [lc], [rc]) (5)
The regular expression is defined according to the regular
language specified in [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] on the alphabet of visitExpressions
(Definition 3). Several expressions are hereby separated by a
semicolon. In a digital format we represent a pattern in XML
(Extended-Markup-Language). Figure 2 shows an example of a
mobility pattern. The pattern’s XML representation is shown in the
code snippet below Figure 2. The part of the pattern containing the
regular expression is
1,01,t{0,4};@;2,02,t{4,8};
        </p>
        <p>It denotes a visit to location 1 (of type 01) for up to 4 time units
followed by an arbitrary number of visits to unspecified locations
(expressed by @3), followed by a visit to location 2 (of type 02) for
a stay time between 4 and 8 time units.</p>
        <p>The time constraint of the pattern definition (Definition 5) is
checked by the TimeConstraintFilter and contains absolute and
relative constraints. The absolute time constraints are: (1) fexit - the
constraint on the first event exit time in milliseconds; (2) opf - the
operator applied to fexit with the following possible values: 0 for
less, 1 for equals, 2 for greater than, - for none; (3) lentry - the
constraint on the last event entry time in milliseconds and (4) opl - the
operator applied to lentry with the same values as opf . In the
example given below no absolute time constraints are specified but, for
example, the values: fexit = 1, 000, 000 and op1 = 2 would
impose on the first visit event that its exitTime must be greater than
1,000,000. The relative time constraints are: (5) lc - the left
constraint for the pattern duration in milliseconds and (6) rc - the right
constraint for the whole pattern in milliseconds e.g. lc &lt; lentry −
fexit &lt; rc. For the given example the relative time constraint is:
0 &lt; visitEventid=2.entryT ime − visitEventid=1.exitT ime &lt;
7, 200, 000.</p>
        <p>
          Below, the XML for the pattern depicted in Figure 2 is shown
containing the pattern id, the regular expression of the sequence of
visits as well as the time constraints.
3 In [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] the JAVA library automaton specifies a regular language
implementation where the symbol ’@’ represents any sequence of characters
1
2
&lt;2h
Our approach consists of several filters implemented in an
embedded Android application: a VisitEventFilter, a PatternFilter and the
TimeConstraintFilter which return a pattern distribution from a GPS
stream input, see Figure 1 and Section 1.
        </p>
        <p>The first filter, theVisitEventFilter, receives as input the stream
of GPS coordinates and a set of locations stored in a local SQLite
database and generates visit events. In order to do so it checks
whether there is a spatial match between the coordinates and
the input of locations, described in Section 2.1 Pattern Matching
Language. The input database contains the tables, which are joined
by their id:</p>
        <p>Locations1(id, xmin, ymin, ymax, ymax)
Locations2(id, latitude, longitude, name, type, min stay)
The main steps of the visit filtering approach are: firstly, the
database is queried to retrieve the ids of the locations in which the
current position is in. As we are restricting the current
implementation to rectangular locations, this can be achieved by a first query
such as:</p>
        <p>SELECT Id FROM Locations1 WHERE x
x ≤ xmax and y ≥ ymin and y ≤ ymax
≥
xmin and
followed by another query on the Locations2 table for retrieving
the rest of the location information (Definition 1).</p>
        <p>
          Secondly, we are maintaining a list of entered locations. Whenever
we detect that the current GPS point is no longer in a specific one of
those entered locations, we check whether we have been staying at
least a time of minStay within that location and, if so, generate a visit
event for that location. In any case, the location is removed from the
list of entered locations. The complete algorithm can be found in [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ].
        </p>
        <p>
          In the PatternFilter we model the patterns using deterministic
finite automata [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. We instantiate an automaton for each of the parsed
patterns from the XML input. In the PatternMatcher class we create
and model automata using the JAVA library automaton [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] to match
the regular expressions specified in the first part of Definition 4.
        </p>
        <p>The class structure of the pattern matching algorithm consists of:
• A PatternFilter class, which instantiates in its constructor a list of
PatternMatcher objects by calling the PatternReader class. The
PatternFilter maintains the list of all patterns. It receives visit
events in its update function and generates and forwards pattern
events to the next filter, theTimeConstraintFilter.
• A PatternMatcher class where an automaton is modeled. In the
constructor the variables needed for saving the automaton data
structure are initialized as well as a pattern event object for storing
the information of the matched pattern.
• The PatternReader reads and converts a pattern from XML to an
object of type PatternMatcher.
• The filter classTimeConstraintFilter checks if the time constraints
are fulfilled for a received pattern event. In its constructor, it reads
and parses the time constraints for each pattern into a
TimeConstraint object.</p>
        <p>In the PatternMatcher constructor, provided in the pseudocode of
Class 1, the field automaton represents an object of type
RunAutomaton, defined in the JAVA library automaton. The fields
for defining the state of the automaton are actualState and
isInitial. The patternEvent is an object of type Event
which stores the properties of the generated pattern event for each
match. The logic of the PatternMatcher is contained in the
functions processVisit and reset shown in the pseudocode of Class 1.
The processVisit function receives a visitEvent as a
parameter, generated by the previous filter (the VisitEventFilter), and
returns a boolean value of true if the visit event completes the
matching of a given pattern and false if not. The processVisit
function generates the visitExpression which has the structure
given in Definition 3. The stepThrough function runs through
the automaton with each character from the visitExpression
as transition and returns the step obtained after the run. A value
for step of -1 means that the matching failed. Any other value
means that the automaton advances in another state, changing
variable actualState. In this case and if the isInitial was true,
the patternEvent stores the exitTime of the visit event. If the
visitExpression could not be matched, the function reset is
called. There, the patternEvent attributes are set to null and the
state of the automaton is set to initial. Another check in the function
is whether the automaton has reached the final state. In this case
the patternEvent stores the entryTime of the visit event since
this is its last visit event matched in the pattern.</p>
        <p>The pseudocode of the PatternFilter is shown in Class 2. In the
constructor a list of PatternMatcher objects is generated, one for
each given pattern. Further, the PatternReader class, which reads and
parses the XML input patterns, is called. For each pattern string the
PatternReader instantiates a PatternMatcher by calling its
constructor as shown in Class 1. In the update function of the PatternFilter,
for each new visit event update, all the existing PatternMatcher
objects from the patternMatcherList are traversed and called to
execute the processVisit function, shown in Class 1. If the
returned value from processVisit is true, then the matched pattern
event, patternEvent is forwarded to the next filter.</p>
        <p>Finally, in the TimeConstraintFilter the matched pattern time
constraints are checked, if any are provided. The time constraints are
de</p>
        <sec id="sec-2-2-1">
          <title>Class 1 PATTERNMATCHER</title>
          <p>Fields: automaton - deterministic automaton for the pattern
actualState - the actual state of the automaton
patternEvent - an Event object for a matched pattern
isInitial - boolean value for initial state of automaton
Constructor: P atternM atcher(id, regex)
id - pattern id
regex - regular expression
1: this.patternEvent.id ← id
2: this.automaton ← new RunAutomaton(regex)</p>
          <p>
            // using DFA java library from [
            <xref ref-type="bibr" rid="ref14">14</xref>
            ]
3: this.reset()
reset()
4: this.patternEvent.entryT ime ← null
5: this.patternEvent.exitT ime ← null
6: this.actualState ← (this.automaton.getInitialState())
7: this.isInitial ← true
boolean processVisit(visitEvent)
8: visitExpression ← makeV isitExpression(visitEvent)
9: step ← automaton.stepT hrough(actualState, visitExpression)
// stepThrough returns the state reached by inputting all characters of the
visitExpression to the automaton starting with actualState
10: if step 6= −1 then // step is -1 for a mismatch
1121:: if ththisis.a.puattotmerantEonv.einsItn.eintitarlytThiemne ← visitEvent.exitT ime
13: this.isInitial ← f alse
1145:: eancdtuifalState ← step
16: else // the visitExpression could not be entirely matched
17: this.reset()
18: end if
          </p>
          <p>// check whether the automaton has reached the end state
19: if automaton.isF inal() then
20: this.patternEvent.exitT ime ← visitEvent.entryT ime
21: this.reset()</p>
          <p>// automaton is set on the initial state and all variables are reinitialized
22: return true
23: else
24: return f alse
25: end if</p>
        </sec>
        <sec id="sec-2-2-2">
          <title>Class 2 PATTERNFILTER</title>
          <p>Fields: patternMatcherList
Constructor: P atternF ilter()
- a list of objects of type
PatternMatcher
1: reader = newP atternReader()
2: this.patternMatcherList ← reader.parseAutomaton(input f ile)
// instantiate list of P atternM atcher
update(visitEvent)
3: for P atternM atcher ∈ patternMatcherList do
4: if P atternM atcher.processV isit(visitEvent) then
5: f orward(P atternMatcher.patternEvent)
6: end if
7: end for
fined in Section 2.1 (Pattern Matching Language) and relate to the
first and last event in the matched pattern, respectively. The
TimeConstraintFilter constructor instantiates a TimeConstraint object for
each pattern. When invoked with a pattern id of the incoming pattern
event, it checks the existing time constraints for the respective pattern
id. The generated event at this level is a matched time pattern.
3</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>PERFORMANCE EVALUATION</title>
      <p>
        Our performance evaluation for checking the potential of the
application in practice is based on synthetic data. The tests were run on
a Samsung Galaxy SII GT-I9100, operating Android Gingerbread,
version 2.3.3. The GPS stream data consists of synthetically
generated coordinates. In addition, we retrieved 800,000 points of interest
(POI) from the geo-service OSM [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] for the location set. The POIs
were obtained for Germany and are of 15 different types. The
generated patterns are formulated similarly to the example pattern in
Section 2.1 and Figure 2, i.e. they specify the first and last location and
allow an arbitrary number of visit events in between. In addition, all
patterns possess time constraints. Our artificial GPS data is generated
such that 40% of all points lead to a match with the location database
and generate a visitEvent. For performance evaluations of the
PatternFilter 2,6% of the input visitEvents complete a pattern match.
Finally, each pattern match is checked in the TimeConstraintFilter.
      </p>
      <p>#Locations
Run-time (ms)</p>
      <p>Stddev run</p>
      <p>DBQuery (ms)
Stddev DBQuery</p>
      <p>Firstly, we measured the run-time for the VisitEventFilter. We
varied the size of the location set from 10 to 800,000. Table 1 shows the
obtained performance results. We distinguish between the database
query (DBQuery) and the entire run-time (Run-time) measured
before forwarding a visit event, therefore the DBQuery run-time is
included in the run-time value. Table 1 shows that the run-time of the
VisitEventFilter is nearly constant when varying the number of
locations in the underlying database. We ascribe this behavior to caching
effects in the SQLite database, taking into account that the database
is opened only once and that all queries are read-only. Ongoing
experiments and code analysis showed that the time needed for the
database part in the VisitEventFilter depends on the number of
overlapping locations in which a given GPS point resides. In the
synthetic GPS tracks used in the evaluation, the GPS points match to
one (non-overlapping) location only. All visit events are detected in
a time well below one second, which is the time difference between
two GPS location updates in worst case. In addition, the number of
monitored locations will be geographically limited in practice. For
example, when restricting the collected POI (points-of-interest) to
the city of Cologne, we obtained a set of about 20,000 locations.</p>
      <p>Secondly, we evaluated the run-time of the PatternFilter under
an increasing number of checked patterns with an average
matching percentage of 2,6%. The results are shown in Table 2. The table
also contains the reading and parsing time for all patterns (Start-up),
which takes place in the PatternFilter constructor. The run-time for
the pattern matching increases linearly with the number of tested
patterns (Run-time), which corresponds to the main loop executed in the
PatternFilter.update method. Furthermore, for each of the instances
of the PatternFilter we show the heap size and the allocated
memory. The values were captured for about three runs as delivered by the
Android debugger class. The results for the heap size are relatively
constant and show for the memory allocations fair results, since the
high number of 300,000 patterns use about 24MB out of 64MB.</p>
      <p>The TimeConstraintFilter has a constant run-time, since it only
retrieves the time constraints for the respective pattern id from a
HashMap, and the time constraint validation is trivial. The run-time
for the TimeConstraintFilter is approximately 10 milliseconds per
pattern event.
Table 3 gives an overview on related work in the field of
spatiotemporal mobility analysis. The criteria on which we compare
related work are: (1) stay time (Stay) - patterns with conditions on
minimum and maximum stay time, (2) travel time (TT) - the time
span between two locations in the pattern, (3) the time constraints
(TC) - time constraints on the full pattern, i.e. on first and last
location in the pattern, (4) full regular expressions (FullRE) - supporting
all the expression options from regular expressions i.e. Kleene
closure (+,*), negation, conjunction, disjunction, and (5) predicates
additional complex conditions on the pattern (e.g. an attribute should
have an incrementing value) and (6) Stream - whether the approach
is applied on-line (on stream data) or later, off-line. Although our
matched patterns are not the most complex, our approach is the first
one successfully tested on a resource-constrained device.</p>
      <p>Stay
X
X
X
X
X</p>
      <p>TT
X
X</p>
      <p>
        The function addProximityAlert provided by the Android
LocationManager [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] performs a similar task as our
VisitEventFilter. Comparative experiments between both classes showed that
the Android function can register proximity alerts for only less than
30,000 locations, compared to our approach, which has been tested
for up to 800,000 locations.
5
      </p>
    </sec>
    <sec id="sec-4">
      <title>CONCLUSION</title>
      <p>In this paper we have shown that the detection of state-of-the art
complex mobility patterns can be implemented on a resource-constrained
environment such as a mobile device. Our experiments show that the
pattern matching can process the matching of 800,000 locations and
up to 10,000 complex patterns in much less than one second. For
handling more locations or more patterns, measures can be taken
to reduce the number of GPS position updates by configuring the
Android Location Provider appropriately or by adding intermediate
GPS smoothing filters. For example, for a frequency of 5 seconds per
position update request, our application can efficiently scale up to at
least 800,000 locations and over 300,000 complex patterns.</p>
      <p>
        We consider a few improvements for future work. We have
initial measurements of battery consumption which are promising, but
need to be investigated in detail. The VisitEventFilter performs very
fast (see Table 1). This results from using rectangular locations only,
which allows to search for locations with the simple query shown in
Section 2.2 efficiently. Specific applications may, however, require
more complex location geometries. For the PatternFilter, run-times
mainly depend of the loop executed over the set of patterns. Here, we
can explore parallelism of the underlying multi-core hardware and
we can apply optimizations from the area of complex event
processing, see [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Furthermore, the handling of travel times (in addition
to pattern time constraints) will be investigated by the repeated
hierarchical composition of our PatternFilter and TimeConstraint filters.
Lastly, we will evaluate the performance of our approach on
realworld data collected from 70 users in the city of Cologne, Germany.
      </p>
    </sec>
    <sec id="sec-5">
      <title>ACKNOWLEDGEMENTS</title>
      <p>The research leading to these results has received funding from the
European Union’s Seventh Framework Programme (FP7/2007-2013)
under grant agreement no. 255951 (LIFT Project).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>J.</given-names>
            <surname>Agrawal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Diao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Gyllstrom</surname>
          </string-name>
          , and
          <string-name>
            <given-names>N.</given-names>
            <surname>Immerman</surname>
          </string-name>
          , '
          <article-title>Efficient pattern matching over event streams'</article-title>
          ,
          <source>in Proc. of the 2008 ACM SIGMOD international conference on Management of data, SIGMOD '08</source>
          , pp.
          <fpage>147</fpage>
          -
          <lpage>160</lpage>
          , New York, NY, USA, (
          <year>2008</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>A.</given-names>
            <surname>Demers</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Gehrke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Panda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Riedewald</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Sharma</surname>
          </string-name>
          , and
          <string-name>
            <surname>W. White,</surname>
          </string-name>
          'Cayuga :
          <string-name>
            <given-names>A General</given-names>
            <surname>Purpose</surname>
          </string-name>
          <article-title>Event Monitoring System'</article-title>
          , Publish,
          <fpage>412</fpage>
          -
          <lpage>422</lpage>
          , (
          <year>2007</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <article-title>[3] Android developer website</article-title>
          .
          <source>www.developer.android.com, Last accessed: April</source>
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>C. du Mouza and P.</given-names>
            <surname>Rigaux</surname>
          </string-name>
          , 'Mobility patterns',
          <source>GeoInformatica</source>
          ,
          <volume>9</volume>
          (
          <issue>4</issue>
          ),
          <fpage>297</fpage>
          -
          <lpage>319</lpage>
          , (
          <year>2005</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>O.</given-names>
            <surname>Etzion</surname>
          </string-name>
          and
          <string-name>
            <given-names>P.</given-names>
            <surname>Niblett</surname>
          </string-name>
          , Event Processing in Action, Manning Publications Company,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>S.-C.</given-names>
            <surname>Florescu</surname>
          </string-name>
          , '
          <article-title>Efficient retrieval of mobility patterns on mobile devices'</article-title>
          , RWTH Aachen, Germany, (
          <year>August 2012</year>
          ). To be submitted.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>F.</given-names>
            <surname>Giannotti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Nanni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Pinelli</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Pedreschi</surname>
          </string-name>
          , '
          <article-title>Trajectory pattern mining'</article-title>
          ,
          <source>in Proc. of the 13th ACM SIGKDD international conference on Knowledge discovery and data mining</source>
          ,
          <source>KDD '07</source>
          , pp.
          <fpage>330</fpage>
          -
          <lpage>339</lpage>
          , New York, NY, USA, (
          <year>2007</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>M.</given-names>
            <surname>Hoffmann</surname>
          </string-name>
          , '
          <article-title>A simulation environment for distributed stream analysis'</article-title>
          ,
          <source>Master Thesis, Univ. of Appl. Sc. Bonn-Rhein-Sieg</source>
          ,
          <article-title>(</article-title>
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>J. E.</given-names>
            <surname>Hopcroft</surname>
          </string-name>
          and
          <string-name>
            <given-names>J. D.</given-names>
            <surname>Ullman</surname>
          </string-name>
          , Introduction to Automata Theory, Languages, and Computation, volume
          <volume>2</volume>
          ,
          <string-name>
            <surname>Addison-Wesley</surname>
          </string-name>
          ,
          <year>1979</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>LIFT</surname>
          </string-name>
          (
          <article-title>Using Local Inference in Massively Distributed Systems)</article-title>
          . http://www.lift-eu.org.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>Ko¨rner, Modeling Visit Potential of Geographic Locations Based on Mobility Data</article-title>
          ,
          <source>Phd thesis</source>
          , University of Bonn,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>C.</given-names>
            <surname>Ko</surname>
          </string-name>
          ¨rner,
          <string-name>
            <given-names>D.</given-names>
            <surname>Hecker</surname>
          </string-name>
          , M. May, and S. Wrobel, '
          <article-title>Visit potential: A common vocabulary for the analysis of entity-location interactions in mobility applications'</article-title>
          ,
          <source>in Geospatial Thinking, Lecture Notes in Geoinformation and Cartography</source>
          ,
          <volume>79</volume>
          -
          <fpage>95</fpage>
          , Springer, (
          <year>2010</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13] Open Street Maps. www.osm.org, Last accessed:
          <year>December 2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>A.</given-names>
            <surname>Møller</surname>
          </string-name>
          . dk.brics.automaton
          <article-title>- finite-state automata and regular expressions for</article-title>
          <source>Java</source>
          ,
          <year>2010</year>
          . http://www.brics.dk/automaton/.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>D. J.</given-names>
            <surname>Patterson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Liao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Gajos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Collier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Livic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Olson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Fox</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H.</given-names>
            <surname>Kautz</surname>
          </string-name>
          , '
          <article-title>Opportunity knocks: a system to provide cognitive assistance with transportation services'</article-title>
          , in Ubicomp, pp.
          <fpage>433</fpage>
          -
          <lpage>450</lpage>
          , (
          <year>2004</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Sakr</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Hartmut</surname>
          </string-name>
          <article-title>Gu¨ting, 'Spatiotemporal pattern queries'</article-title>
          ,
          <source>GeoInformatica</source>
          ,
          <volume>15</volume>
          (
          <issue>3</issue>
          ),
          <fpage>497</fpage>
          -
          <lpage>540</lpage>
          , (
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>I.</given-names>
            <surname>Sharfman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Schuster</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Keren</surname>
          </string-name>
          , '
          <article-title>A geometric approach to monitoring threshold functions over distributed data streams'</article-title>
          ,
          <source>in Proc. of the 2006 ACM SIGMOD international conference on Management of data, SIGMOD '06</source>
          , pp.
          <fpage>301</fpage>
          -
          <lpage>312</lpage>
          , New York, NY, USA, (
          <year>2006</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>E.</given-names>
            <surname>Wu</surname>
          </string-name>
          , '
          <article-title>High-performance complex event processing over streams'</article-title>
          ,
          <source>in Proc. of the 2006 ACM SIGMOD international conference on Management of data, SIGMOD '06</source>
          , pp.
          <fpage>407</fpage>
          -
          <lpage>418</lpage>
          , (
          <year>2006</year>
          ).
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>