1.一种可扩展快速的轨迹聚类方法,其特征在于包括以下步骤:(1)局部MST计算:
(1-1)已知轨迹Ti由Ni个连续不断的点的位置和时间戳组成,其中zj和tj分别表示轨迹Ti中数据点的位置和时间戳,位置由其x坐标和y坐标组成,j∈[1,Ni];STi为Ti的子集,STi中的点为轨迹Ti中的连续点的一部分,轨迹数据D为N个轨迹的集合{T1,T2,...,TN}或者轨迹的子集的集合{ST1,ST2,...,STN};
首先对轨迹数据D建立STR树索引,STR树索引的每个叶子节点存储近似相等的轨迹;然后根据索引的叶子节点将轨迹数据D划分为V个子集D1、D2、…、DV,V为叶子节点数;
(1-2)寻找邻域内的轨迹:
(1-2-1)将V个子集分别分配给一个CPU线程;
(1-2-2)对于每个CPU线程,该CPU线程扫描该CPU线程中的子集的各个轨迹,在任意时间周期tk到tk+1内的两条轨迹T1和T2,T1和T2均为该CPU线程中的子集中的轨迹,T1和T2是和 在时间标记tk到tk+1内的线性插值;所述时间周期tk到tk+1为设置的采样频率的倒数, 和 是时刻tk的点到时刻tk+1的点组成的两条已知的不同线段;
(1-2-3)利用以下时空距离公式近似计算任意两条轨迹的时空距离:其中,Dist(T1,T2)表示任意两条轨迹T1和T2的时空距离, 是随时间变化的欧氏距离,通过以下公式计算:其中, 和 分别表示数据点 的x坐标和y坐标, 和 分别表示数据点 的x坐标和y坐标, 和 分别表示数据点 的x坐标和y坐标,和 分别表示数据点 的x坐标和y坐标;
(1-2-4)判断两条轨迹之间的时空距离是否小于预设值ε,若是则两条轨迹为邻域ε内的轨迹,将两条轨迹进行聚类;
(1-2-5)重复步骤(1-2-2)至步骤(1-2-4),直到每个CPU线程中子集的任意两条轨迹完成聚类;
(1-3)对于每个CPU线程,计算该CPU线程中的每条轨迹到该轨迹的MBB之间的距离,其中任意一条轨迹Ta到其MBB之间的距离利用以下公式计算:其中,M表示轨迹Ta的MBB,g表示轨迹Ta投影到其MBB的线段数目,i表示轨迹Ta投影到其MBB的线段序号,Ta.linei表示轨迹Ta投影到其MBB的第i条线段;
(1-4)生成局部MST:
(1-4-1)设置一个共享队列Q使其对所有CPU线程共享;
(1-4-2)对于每个轨迹,利用公式(1)分别计算该轨迹与其它各轨迹之间的核心距离ε′,若ε′<ε则其他轨迹为该轨迹邻域ε内的轨迹;
(1-4-3)对于每个轨迹,判断该轨迹Ti在邻域ε内的轨迹数目是否大于预设的一个聚类中最少的轨迹数目minNumofTrs,若是则轨迹Ti为核心轨迹,进入步骤(1-4-4);
(1-4-4)在所有两个轨迹之间的核心距离值中,将最小的核心距离值插入队列Q;
(1-4-5)重复步骤(1-4-2)至步骤(1-4-4)直到对每个轨迹判断其是否为核心轨迹;
(2)生成全局MST:
(2-1)创建一个空的MST;
(2-2)归并步骤(1-4)生成的所有局部MST,得到全局MST;
(3)利用粗粒度并行方法或细粒度并行方法从全局MST提取聚类。
2.根据权利要求1所述的可扩展快速的轨迹聚类方法,其特征在于:步骤(1-2)通过FindNeighbor函数寻找邻域内的轨迹。
3.根据权利要求1所述的可扩展快速的轨迹聚类方法,其特征在于:步骤(3)所述的粗粒度并行方法包括以下步骤:利用Hyper-Q将2个以上CPU线程同时连接一个GPU启动GPU内核,从全局MST提取聚类。
4.根据权利要求1所述的可扩展快速的轨迹聚类方法,其特征在于:步骤(3)所述的细粒度并行方法包括以下步骤:(3-1)MST的并行计算:
(3-1-1)并行计算每条轨迹之间的时空距离,将结果以矩阵形式存储到GPU;
(3-1-2)利用GPU线程获取所有轨迹的核心距离,利用所有轨迹的核心距离构成列表L,列表L中的每条信息记录为边(tri,trj,w),表示任意两条互相可达的轨迹tri和trj之间的可达距离w,轨迹tri和trj之间的可达距离w为邻域ε内最小的核心距离;
(3-1-3)扫描所有MST中的轨迹,如果一个轨迹的祖先节点属于它的孩子节点,则构成环;记录下每个环对应的轨迹,删除MST中的环;
(3-2)MSTs的并行归并:
(3-2-1)每个GPU线程合并一对最小生成树MSTs;
(3-2-2)当两个MSTs根节点之间的时空距离小于ε时,通过将一个的根节点指针指向另一个来合并两个MSTs;
(3-2-3)重复步骤(3-2-1)到(3-2-2),直到生成全局MST;
(3-3)聚类的并行提取:
(3-3-1)各个GPU线程并行地初始化每个轨迹,使各个轨迹具有单独的轨迹ID集群标识;
(3-3-2)从所有GPU线程中选取一组GPU线程,该组GPU线程中的每一个GPU线程检查列表L中的一个边,对于边(ti,tj,wij)检查任意轨迹ti与tj是否属于邻域时空距离内的同一聚类,若是则将两条轨迹ti与tj置为相同的聚类ID。