本文来自本人已发表论文
《Temporal Model for Transportation Management》
一.基于马尔可夫链的时空模型
基于马尔可夫链的时空数据模型是利用马尔可夫链和时空量化思想对时空立方体模型进行改造和扩展,形成了基于马尔可夫链的时空立方体数据模型。例如在二维平面上使用马尔可夫链状态空间表示,将其格网化,每个状态根据一定的概率转移到周边9状态中的任意一个。
通常时空对象下一时刻对应的空间位置仅与当前时刻对应的空间位置有关,而与之前时刻无关,这一特点正好符合马尔可夫特性。因此,时空对象的空间变化现象可以理解为一种马尔可夫随机过程,其历史变化可以理解为一条保存了过去、当前以及未来信息的变化发展但与过去无关的马尔可夫链。
在二维空间平面上对其进行格网量化,具体格网化方法根据应用场景的不同可选择有:经纬格网量化、均匀格网量化、四叉树格网量化等。如果格网划分选择合适,则每次时空对象移动均不超过一个格网,在当前时刻时空对象的空间位置可依一定概率转移到周边及其自身的9个格网中,且格网状态转移概率满足:
图1 从T0到T1时刻的状态转移示意图
先设定时空粒度选择合适,那么时空对象进行状态转移仅需移动一个格网,即在时空立方体中的相邻立方体间移动,那么我们可以用4位二进制来表示不同的格网,并存储在计算机中,这也为我们对其使用数据压缩算法提供了可能。
二.时空对象运动轨迹的数据压缩
在二维平面格网化之后,我们将得到一个的矩阵,而时空对象所处的空间位置及其周围格网构成一个的矩阵,我们使用4位二进制来表示,如下图所示,括号内为其二进制编码。
图2 空间格网的二进制编码
故时空对象在一段时间的运动轨迹,在每个时刻可以使用4位二进制表示,最终运动轨迹由多个4位二进制构成的一系列数字表示。现在我们可以对这一系列数字表示的运动轨迹进行压缩。运动轨迹状态转移二进制编码过程的示意图如下:
图3 时间序列状态转移编码示意图
哈夫曼编码
- 首先统计9个格网的字符及其各自的频率,并将其频率从大到小进行排序。
- 选定最小的两个格网频率合成为一个二叉树,重复直到最终生成为一个哈夫曼树。
- 假定该哈夫曼树中结点指向其左子树标’0’,指向其右子树标’1’,最终的到一个总长最短的二进制前缀编码。
使用该编码替代原有的4位二进制编码,达到数据压缩的目的。
但哈夫曼编码在用于基于马尔可夫链的时空数据模型存储的时候有明显的缺点,运动轨迹使用一系列4位二进制表示9个空间单元,但在进行哈夫曼编码时在表示出现频率较低的空间单元时编码长度可能长于4位二进制,虽然哈夫曼编码仍能起到压缩运动轨迹数据的作用,但效果并不理想。如下表所示,虽然总体上哈夫曼编码对二进制信源符号仍能起到压缩作用,但其压缩率远高于信息论理论下界,故使用哈夫曼编码并不是二进制信源符号压缩的最好方式。
图4 二进制信源符号的哈夫曼编码的示意图
算术编码
- 同样首先统计9个格网的字符及其各自的频率。
- 将区间[0, 1)划分成多个连续的子区间,每个子区间代表上述字符,区间长度等于字符出现的频率。频率越大,区间越长。所有字符区间之和为1。
- 编码从区间[0, 1)开始,设:
4. 顺序读入原数据字符,并基于如下公式确定编码区:
其中L:代表该原始字符在[0,1)中的下界,H:代表该原始字符在[0, 1)中的上界。重复该算法直到原始数据字符串的最后一位。
5. 最终得到区间[low, high)中任意一个小数,并以二进制形式输出即得到编码后的字符串。
选取0001、0010、0011、0100四个二进制编码,设概率依次为0.2、0.2、0.2、0.4,压缩过程示意图如下:
图5 算术编码压缩过程示意图
算术编码对二进制信源符号的压缩率通常高于哈夫曼编码,尤其在存储4位二进制构成的运动轨迹的情况下。算术编码的解码方式为编码的逆过程,从编码得到的小数开始,寻找小数在哪一个相对子区间内,最终得到编码之前原始数据字符串。
三、时空对象运动轨迹的存储
1.运动轨迹矩阵的存储
在二维空间平面上进行格网化之后,可将其视为一个矩阵,如下所示:
图6 二维空间格网化矩阵示意图
其中时空对象运动轨迹经过的格网标记为1,而时空对象未经过的格网则设为0,在多数情况下该矩阵应为一个稀疏矩阵。故我们可以使用稀疏矩阵的压缩算法,只存储标记为1的单元在矩阵中所处的行标和列标。例如存储格式可以为:
行标 | 列标 | 时刻 |
但在时空对象的具体应用中,只记录非0单元的坐标及时刻并不能满足需求,所以我们也需要将其时空对象的状态转移概率存储在数据库中,并将其进行连接且可进行数据检索。
2.状态转移矩阵的存储
在基于马尔可夫链的时空数据模型中,时空对象依一定概率转移至自身及其周边的9个格网中,9个格网可使用对应的4位二进制表示并储存,其对应的转移概率也需要对其进行处理并存储在计算机中,为了满足数据存储的需要,我们可使用如下字段表示:
时间 | 输入格网 | 格网1转移概率 | 格网2转移概率 | 格网3转移概率 | 格网4转移概率 | 格网5转移概率 | 格网6转移概率 | 格网7转移概率 | 格网8转移概率 | 格网9转移概率 | 输出格网 |
3.运动轨迹矩阵与状态转移矩阵的连接
存储时空对象运动轨迹中的每一行与存储状态转移矩阵中的行是一一对应的关系。在具体的计算中基于数据结构的思想可使用指针连接,在运动轨迹的存储矩阵数据结构中增加一个指针域指向状态转移矩阵,用于连接运动轨迹矩阵与状态转移矩阵。
图7 使用指针连接矩阵示意图
存储在在数据库中时可使用外键的思想[10],但这需要在运动轨迹矩阵和状态转移矩阵的存储行增加一个公共关键字。
其中运动轨迹矩阵存储格式如下所示:
行标 | 列标 | 时刻 | 时空对象运动轨迹标记符 |
状态转移矩阵存储格式如下所示:
时空对象运动轨迹标记符 | 时间 | 输入格网 | 格网1转移概率 | 格网2转移概率 | 格网3转移概率 | 格网4转移概率 | 格网5转移概率 | 格网6转移概率 | 格网7转移概率 | 格网8转移概率 | 格网9转移概率 | 输出格网 |
时空对象运动轨迹标记符在运动轨迹存储表中作为一个字段,在状态转移矩阵存储表中作为关键字。作为外键连接两个关系,时空对象运动轨迹的对应元组中该字段存储数据相同。
时空对象的运动轨迹在不同的应用中有不同的需求,在运动轨迹的存储中格网的转移概率占用了大部分的存储空间,但格网的转移概率只是时空对象在运动过程中状态转移计算所使用的参数,在交通行为分析等应用中可能尤为重要,但在城市流量统计等应用中就显得比较多余了。故在实际应用中根据要求不同也需要对运动轨迹矩阵和状态转移矩阵的字段进行更改和删减,甚至合并为一张表。
4.数据压缩算法在存储过程中的应用
在上述状态转移矩阵存储格式中,本文使用了单独两个字段存储输入格网和输出格网以方便检索,但是实际使用中无需为其使用两个字段存储。当我们获取时空对象的运动轨迹并转化为一系列由4位二进制表示时,我们使用哈夫曼编码或算数编码进行压缩,并将其原始字符和压缩时使用的替代字符及其频率进行存储。需要使用时可将其解码,并按顺序添加进矩阵中即可。该方法节省了存储空间,但同样也增加计算量和工作步骤。
参考文献
- 曹闻. 时空数据模型及其应用研究. Diss. 解放军信息工程大学, 2011.