在TransCAD的交通分配中更好地设置形心连杆 Better Method to Set Centroid Links for Traffic Assignment in TransCAD

在TransCAD中运行交通分配算法时,需要设置形心连杆。这里的形心是交通小区的形心,其目的是把交通小区连接到路网上,从而让该小区的出行量参与路网上的交通分配。

例如,下图是一个用地方案的交通小区划分与路网结构。

 

我们可以通过Tools — Map Editing — Connect,把小区的形心连接到路网上,下面的对话框显示:连接的发起层是小区(Layer:taz),连接对象是路网上的结点(To line lyaer: Roads; Connect to 选择 Nodes),而且每个小区只有1个形心连杆(Maximum connections: 1)。这里在Connects to 中选择Nodes而不是Lines的原因是,后者会把之前编辑好的Lines打断,还要重新定义道路属性,比较麻烦。

连接完成后是这个样子。新加入的形心连杆用蓝色显示。可以看到,每个小区的形心都被连接到最近的路网节点上,当运行交通分配时,该小区的全部交通量即通过形心连杆进入路网。由于形心连杆是一个抽象的假想道路,为了不影响分配结果,一般把它的行程时间设得极小(如0.00001),而通行能力设得极大(如100000),即无限量的交通量可以从交通小区形心瞬移至路网。

以上就是典型的形心连杆设置方法。这种方法虽然可以,但有一个小问题。以上图中左下角的19/20/21三个交通小区为例,注意到它们的形心连杆都被连接到了同一个路网节点上,如果这三个小区的交通量都很大的话,那么该路网节点将瞬间承受非常高的交通压力,导致局部饱和度过高。事实上,我看过的流量分配结果中,有不少过饱和路段显然就是由于这样的问题造成的。这显然是不合理的,因为19号小区的交通量有可能分散其周围的5个节点,20/21同理,如果要做得精细的话,可以根据这些小地块的机动车开口位置来调整形心连杆的连接结点。

因此,我更倾向于将每个小区通过多个形心连杆连接到多个路网节点上,例如下图:

这样的设置既可以通过上面的Connect菜单中增加Maximum connections的数值实现,也可以自己手画。强烈推荐后者,因为不会出错,且可以考虑机动车的开口方向,例如:最上层一排小区的形心连杆都朝下,因为上面是一条过境快速路,不适宜一般的机动车开口。

然后是不是就可以建立net文件,运行交通分配了呢?当然不是!这时候要是直接分配的话,你会发现所有的流量全部都在形心连杆上,正常的道路是分不到流量的。道理很简单,我们可以用Networks/Paths — Shortest Path工具随便查看一下两个路网节点之间的最短路径,就会发现最短路径全部由形心连杆构成,因为如刚才所说,形心连杆的行程时间往往被设置得很小,具有“瞬移”效果,那当然就是最短路径啦。下图中,两个相隔很远的小区之间的最短路径是由14段形心连杆构成的,每个连杆的行程时间被设置为0.01,因此最短路径的总行程时间就是0.14。

由于我们把每个小区连接到多个路网节点上,所以有非常大的概率出现不同小区连接到同一个节点上的情况,此时,这两个小区就可以通过形心连杆瞬移了,连接它们的正常道路即被忽略。不要以为只有这种“多形心连杆”的做法才会有这样问题,即使是传统的“单形心连杆”也可能出现,只不过没那么严重。上面的例子中,左下角19/20/21三个交通小区的单形心连杆也连接到了同一个路网节点上,它们之间也会出现相同的情景。

怎么解决这个问题呢?很简单,只要在路网设置上加一个转向惩罚即可。我们知道,从1个小区到达相邻小区的最简单的路径形式也应该是“形心连杆→正常路段→形心连杆”,当然,中间部分可以有很多正常路段。因此,我们可以接受“正常路段→正常路段”,“形心连杆→正常路段(即从小区出发)”、“正常路段→形心连杆(即到达小区)”,只是不能接受“形心连杆→形心连杆”,因为这肯定意味着某个正常路段被不应有地跳过了。

TransCAD中的操作如下。首先,我们要保证在创建形心连杆的时候,用了某个字段标识一个Link是否为形心连杆,这里我们用的字段名为“CentroidLinks”,取值1/0表示是/不是形心连杆。然后,选择Networks/Paths — Settings,在Info对话框的Options选项中,将Link Type选择为该字段(CentroidLinks),同时勾选Penalties中的Turn。然后,在Turn Penalties中找到Link Type面板,即基于路段类型设置转向惩罚,这里,TransCAD需要读取一个格式为.bin的表文件,我们把它命名为“LinkTypeBasedTurnPenalty.bin”,再OK就可以了。

“LinkTypeBasedTurnPenalty.bin”的形式非常简单,如下图。需要4个字段:FROM和TO记录从……转向……的路段类型,由于我们前面已经在Link Type中选择了“CentroidLinks”,而该字段的1代表形心连杆,因此,下图就代表了这一行的转向惩罚是对“形心连杆→形心连杆”的转向惩罚。后面三个字段LEFT, RIGHT, STRAIGHT, UTURN分别是对左转、右转、直行、调头的惩罚值,写上具体的数字就是惩罚时间,这里留空就指禁行。于是,这样的设置就是从一条形心连杆不可以以任何方式直接到另一条形心连杆。TransCAD中怎样建这样的.bin文件很简单,不多说了。

完成路网设定以后,再去看一下最短路径。这时就没有问题了,除了第一段和最后一段是出发和到达所必须的形心连杆以外,其他路径都是使用正常路段。

利用这样的路网和net文件进行交通分配,结果如下。可以看到,几乎每个形心连杆上都是有流量,每个小区的交通量通过多条形心连杆相对均衡地分配到路网上,避免了由单形心连杆造成了初始流量扎堆导致的不精确和虚假的过载问题。

当然,这样的结果还不是我们想要的,我们需要隐去形心连杆。通过Selection — Select by Condition,利用CentroidLinks = 1的条件选出形心连杆,构成一个叫CentroidLinksSet的选择集,然后再在Select — Settings中,通过点击Status按钮,将CentroidLinksSet选择集设为Invisible即可。

最终结果如下图。

 

 

 

 

This Post Has 2 Comments

  1. 请问这个bin文件怎么生成啊?

    1. transcad中可以新建bin文件,然后在bin文件中编辑

发表评论

Close Menu