近来重新学习了一下 Planning Bike Lanes based on Sharing-Bikes’ Trajectories这篇文章,觉得写得蛮好的,对于学习轨迹数据挖掘具有一定的启发。这篇文章是国际上对于无桩共享单车比较早期的一个研究,第一作者Jie Bao(抱歉,不知道中文名怎么写。。)发表了多篇单车轨迹数据挖掘的相关文章,论文的另一个合作者郑宇博士相信做数据挖掘和城市计算的朋友应该不会陌生。本文主要是论文的一个学习笔记,另外附带了一点点个人理解,仅供参考,欢迎拍砖。下面开始正文:
一、背景
自行车路网规划是城市慢行交通规划的重要任务之一。理想情况下,城市内部每条道路上都划定有专用的自行车路网是一种满足骑行需求、促进骑行的上策。但实际中由于受到经费预算、道路宽度等因素影响,只能选取部分地区优先构建单车路网。传统自行车路网规划大多数由专家根据用户调查推荐确定,主要依据是根据预估的单车通行或者调研得到实际骑行需求确定优先构建自行车路网的地区和道路。
由此可知,如何提取用户的实际骑行需求是自行车道规划的关键问题。海量共享单车轨迹数据为提取用户实际骑行需求和骑行路线提供了便利条件。原始的GPS轨迹数据是一系列的定位点,首先需要将GPS轨迹通过地图匹配(map-matching)将轨迹数据对应的骑行路线还原为路段序列。即。
二 、问题建模
自行车道规划问题可以描述为:在给定预算的条件下,在研究区域中选取一个路网子集用于自行车道规划,以期构建的自行车道能够最大限度满足用户的骑行需求。下面我们对问题进行细化,用数学语言对其限制条件和目标函数进行描述。假定原始的路网表示为,其中和 分别表示路段和节点的集合。那么需要从中选定一个路段子集 来构建自行车道,其中。
(一)限制条件
对于 E'的选定 需要满足以下两个限制条件。
- 预算限制
假设路段 对应的建设费用为,总的预算为 ,则需要满足以下条件
(1)
2.连通限制
假设以每一个连通路段作为一个施工点,为了便于施工和管理(这里的管理我理解的是应该后期的管理和维护),需要对连通路段子集的数量做一个限制。设中所的连通路段子集数量表示为 ,总的施工点数不超过,则有以下限制条件:
(2)
(二)优化目标
为了使规划的自行车道效益最大,需要考虑两个目标。第一,对于一个自行车路段而言,其所服务的骑行数量越多越好,所服务的骑行距离越长越好。第二,构建的自行车道覆盖骑行路线中的连续路段越高越好。第一点很好理解,一条路上自行的数量越高那么修建自行车道所带来的收益越高。第二点可以从用户的骑行体验上来考虑,假设规划两个路段,那么这两个路段如果是在一条骑行路线的两个连续路段上肯定比分散在该路线的两个不同位置所带来的骑行体验更好。如下图(图片来源)所示,对于一条骑行路线而言,方案2所带来的骑行体验优于方案1(两者修建的路段长度均为2km)。
在实际情况中,这两个目标可能相互之间可能存在矛盾,所以可以通过设定权重的方式来对二者的重要性进行权衡。对于一条轨迹 而言,其对应收益 可以表示如下:
(3)
其中表示是所有和轨迹相交的连续路段的集合,表示的是路网中最短路段的长度,添加这个参数的目的是为了保证 ,是用于平衡两个目标的参数,当 时表示我们并不在乎这条轨迹的是否被连续路段覆盖;当时表明,如果轨迹被连续路网覆盖越高越好。(注:这里收益计算有两处巧妙的构思:1)每一条轨迹作为收益计算的基本单位,而非采用拟构建的路段作为计算的基本单位。如果我们只考虑第一个目标的话,实际上以拟规划路段作为基本单位也是可以,但是如果同时考虑第二个目标的话,那么这里以单个轨迹作为收益计算的基本单位可以使用更加的数学描述。2) 的参数构建,这个参数的构建一方面保证了在相同覆盖长度条件下,连通路段与越长越好,另一方面当一个连通路段被拆分为两个连通路段时,长的那个连通路段对应的权重更高。)
基于以上,对于一个规划自行车道集合 ,总的收益计算方法如下:
(4)
因此,最终的问题可以表示为:
(5)
那么这个问题该如何求解呢,文章中采用的是一种贪心算法,在使用贪心算法之前,作者首先证明了这个最优化问题是一个NP问题。
引理1:给定预算条件下,选定K个连通路段,以期得到路段收益最大是一个NP问题。
证明:
我们可以将这个问题作为一个0-1背包问题(Knapsack problem)的简化问题。首先我们可以将路网中每一个路段 作为一个物品,其对应费用为0-1背包问题中的物品大小,物品收益对应的是该路段对总收益的贡献。则集合就相当于是一个背包,其大小总容量为总预算。如果设定 ,则我们的问题就可以转换为一个0-1背包问题。
因此通过设定,则对于0-1背包问题的任意一个决策实例,我们可以找到在给定预算条件,选定个连接路段使得收益最大问题的一个决策实例。这样,0-1背包问题可以还原/简化(reducible to)到我们当前的问题,因此可以证明当前的问题是NP问题(这里描述的不太好,自己都感觉怪怪的)。
三、问题求解
(一)问题描述
因为原始的问题是一个NP问题,所以作者采用贪心算法来对问题进行求解,包括以下三步:
- 初始化:选定个路段作为初始的路段,这样可以保证后面最终的连通路段数量不超过个(因为路段扩张是基于连通路网的进行扩展),将个路段的相连的路段作为备选集合。
- 路网扩张:在一个次迭代中,从备选集合中选取最佳的路段(也就是单位开销带来收益最大的路段,相当于传统 0-1背包问题中的物件收益与物件大小之比)将其添加到中,并将其关联的路段添加到备选集合当中。
- 终止:当预算到达之后,则终止程序。
对应的算法伪代码如下(图片来源):
(二)两种不同的初始化策略
可以发现,对于上述算法,关键的步骤就是选取K个初始路段。文中提出了两种方法,分别如下:
- 最大的k个路段:这里的最大是指单位花费所带来收益(即 ),文中分析了方案的缺点在于所得到的连通部分(connected components, 可以将其看作是一个子图)的数量会比较少,无法兼顾多个区域的路网构建需求,因为top k 个路段通常聚集在一起。
- 基于空间聚类的初值选取:选取前单位花费收益最高的前百分之一路段 (目的是为了加快聚类速度),然后基于agglomeration hierarchical clustering对其进行聚类,之后选取每一个类中单位花费收益最大的路段(注:应该还是top k)。
四、实验
实验部分主要开展了两组实验:1)比较两种初始化方法在设定不同K值和不同总预算条件下对应的收益;2)比较在clustering-based 初始化条件下,不同值得到的结果。
总体来讲,基于聚类方法的初始化得到的结果一方面能够兼顾空间上的公平性,另一方面取得的收益在大多数情况下比top k的方法更好(如下图12)。另外,在大的时候所得到的结果中个连通子图中更可能存在相互连通的情况(如下图13)。最后放两张原文的图直观的说明下两组实验得到的结果。
五 后记
上面所讲的主要是我个人所关注的部分,这里忽略了对原文中的一部分内容的描述,比如说case study,希望了解详细的可以参见原文(估计对这篇文章感兴趣的人肯定是看过原文的
~><~)。关于文章的复现,对于没有接触过map-matching 的人而言可能这一部分会有点难度,另外algorithm 1中可能还涉及到一些具体数据结构设计(以便加快检索与一条轨迹相交的连通路段的计算)。这部分工作后面如果实现了再来分享。
第一次发论文读书报告相关的博客,主要为了加深下对文章的理解。仔细想想,文章在方法以及应用层面上应该都还有一些改进的空间, 这里暂不做探讨了。