system verilog随机函数_随机交通分配经典Dial算法基本原理及C++并行计算实现

本文介绍了交通规划中的Dial算法,用于随机交通分配问题。通过C++编程实现,结合并行计算优化,适用于大规模路网案例。Dial算法包括初始化、权重计算和交通量分配三个步骤,文中提供了详细步骤解析和数据文件准备。
摘要由CSDN通过智能技术生成

点击蓝字

关注我们

提高知识水平

Transportation

1c0d40dd6aff1e3e3ffd3ea2c9fc943f.png

导语

交通分配(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):

027a62180bd66e59cab465905fca5f74.png

由该公式可知,凡是似然值等于0的路段都是不合理路段,不应该考虑包含它们的径路;凡是似然值大于0的路段都可以考虑包含在有效径路中;当某径路包含的所有路段的似然值都等于1时,该径路必然是最小阻抗径路。

Dial算法中的初始化过程,实质就是确保出行量分配在使其有效地远离其起始节点的 径路上,那些“走回头路”的径路将被剔除掉。

步骤2:从起点r开始按照r(i)升的顺序,向前计算路段权重。

从起点r开始,按照r(i)的上升顺序依次考虑每个节点,对每个节点,计算离开它的所有路段的权重值,对于节点i,其权重W(i,j), j∈O(i)的计算公式为:

d8708f9c03e8a68e4eb9c561a4427247.png

当达到终点s,即i=s时就停止权重的计算。

步骤3:从终点$开始,按照s(Q上升的顺序,向后计算路段交通量。

从终点s开始,按照s(j)的上升顺序依次考虑每个节点,对每个节点,计算进入它的所 有路段的交通量,对于节点j,其交通量x(i,j), i∈D(i)的计算公式为:

6da2c1842af598ed5c674cb2fd5bdecb.png

当达到起点r,即j=r时停止计算。同时整个算法结束。式中qn表示从起点r到终点s的OD交通量,方括号内的交通量之和是指节点j的所有下游路段上的交通量之和,它们应该先于路段(i,j)上的交通量事先已被计算出来,所以节点的考虑顺序是十分重要的。

777f550111e1997001bdb4b3a102ad1d.gif

二、数据文件准备

下面以邵春福老师《交通规划》中的路网为案例基础进行数据文件准备。文件包括路网节点node.csv,路网连接边link.csv,待分配流量demand.csv。

(1)node.csv

Node数据存储于g_node_vector中,字段信息如下图所示:

node_id

zone_id

x_coord

y_coord<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值