点击蓝字
关注我们
提高知识水平
Transportation
导语
交通分配(Traffic Assignment)是交通规划四阶段法的最后一步,其中随机分配(Stochastic Assignment)方法是其中一种重要方法。随机分配主要基于“随机用户平衡”(Stochastic User Equilibrium,即SUE)理论实现,其中Dial算法是求解SUE问题的经典方法,具体理论可参考《交通规划》教材中随机交通分配方法。本文在简单回顾Dial理论方法基础上,通过C++进行编程实现,同时设计了求解交通问题简单的并行计算结构,为求解大规模问题提供思路与方法。
1.首先回顾Dial方法的基本理论与基本步骤。
2.其次较为详尽解释Dial方法的C++编程实现。
3.最后提供程序完整解决方案,供大家交流学习。
一、Dial算法具体步骤
步骤1:初始化。确定有效路段和有效径路.
•计算从起点r到所有节点的最小阻抗,记为r(i);
•计算从所有节点到终点s的最小阻抗,记为s(i);
•定义Q(i)为路段起点为i的路段终点的集合;
•定义D(i)为路段终点为i的路段起点的集合;
•对每个路段(i,j),根据下式计算路段似然值(Link Likelyhood)L(i,j)(此时通常假定参数b=1):
由该公式可知,凡是似然值等于0的路段都是不合理路段,不应该考虑包含它们的径路;凡是似然值大于0的路段都可以考虑包含在有效径路中;当某径路包含的所有路段的似然值都等于1时,该径路必然是最小阻抗径路。
Dial算法中的初始化过程,实质就是确保出行量分配在使其有效地远离其起始节点的 径路上,那些“走回头路”的径路将被剔除掉。
步骤2:从起点r开始按照r(i)升的顺序,向前计算路段权重。
从起点r开始,按照r(i)的上升顺序依次考虑每个节点,对每个节点,计算离开它的所有路段的权重值,对于节点i,其权重W(i,j), j∈O(i)的计算公式为:
当达到终点s,即i=s时就停止权重的计算。
步骤3:从终点$开始,按照s(Q上升的顺序,向后计算路段交通量。
从终点s开始,按照s(j)的上升顺序依次考虑每个节点,对每个节点,计算进入它的所 有路段的交通量,对于节点j,其交通量x(i,j), i∈D(i)的计算公式为:
当达到起点r,即j=r时停止计算。同时整个算法结束。式中qn表示从起点r到终点s的OD交通量,方括号内的交通量之和是指节点j的所有下游路段上的交通量之和,它们应该先于路段(i,j)上的交通量事先已被计算出来,所以节点的考虑顺序是十分重要的。
二、数据文件准备
下面以邵春福老师《交通规划》中的路网为案例基础进行数据文件准备。文件包括路网节点node.csv,路网连接边link.csv,待分配流量demand.csv。
(1)node.csv
Node数据存储于g_node_vector中,字段信息如下图所示:
node_id |
zone_id |
x_coord |
y_coord< |