资讯动态

交通需求预测中的四种增长系数法:算法对比与工程实践选型指南

发布时间:2026/9/7 8:12:39 来源:尧图企业网站定制
简介针对交通规划课程中交通量预测的编程需求提供了四种经典方法的MATLAB实现面向需要完成课后习题或进行模型对比的高校学生与入门研究者。压缩包共包含四个文件均为MATLAB脚本体积仅约两KB分别实现弗兰特法、底特律法、平均系数法与佛尼斯法。每个脚本对应一种增长系数模型代码简短、无多余依赖便于阅读和二次修改用户可替换为实际OD矩阵或调整增长因子快速观察不同参数下的预测结果变化。通过运行不同脚本可直观比较四种方法在给定初始OD矩阵与增长条件下的预测结果差异理解各方法在收敛速度、适用场景上的区别。例如弗兰特法适合快速估算底特律法适用于饱和度较高地区平均系数法简单易行佛尼斯法则能更细致地考虑路网结构。已有926人学习下载适合结合教材步骤进行验证也可作为课程设计或交通规划实验的基础代码。整体聚焦算法核心实现可作为进一步扩展多因素预测模型的起点也是理解传统交通增长系数法的实用参考资料。 做交通规划的同学应该都经历过这样的时刻手里有一张基年的OD表领导说要预测未来十年的出行分布。很多人的第一反应是直接拿全区总量增长率乘一下比如未来出行总量增长1.8倍就把每个OD对都乘1.8。这个做法粗看一眼没问题仔细一排查就露馅了——它没有考虑不同小区发生与吸引能力的差异更没有考虑小区之间的空间相互作用。于是就有了增长系数法这个大家族而今天要聊的弗兰特法、底特律法、平均系数法、佛尼斯法就是这家族里最常被放到一起比较的四种经典算法。这篇文章适合三类人看刚接触交通需求预测的学生、要应付期末或注册考试的考生、以及在实际项目中需要快速估算未来OD表的规划从业者。我会把这四种方法放在同一套算例里跑一遍告诉你它们各自在算什么、怎么算、算出来差在哪更重要的是项目里到底该选哪一种。看完之后你不仅能看懂教材里的公式还能自己动手把一张基年OD表推到目标年。1. 为什么这四个方法经常放在一起讲1.1 出行分布预测在四阶段法里的位置交通需求预测最经典的四阶段法是出行生成、出行分布、方式划分、交通分配。出行生成解决的是每个小区将来发生多少出行、吸引多少出行的问题输出的是各小区的发生量和吸引量。但光有总量还不够你还得知道这些出行从哪个区到哪个区去也就是OD分布——这是第二阶段要回答的问题。出分布预测的方法大体分两类一类是增长系数法直接拿基年OD表按增长倍数放大修正另一类是引力模型等构造性模型靠小区之间的阻抗函数来模拟分布。增长系数法的逻辑更朴素既然基年已经有了完整的OD分布结构未来如果没有颠覆性的变化这个结构大体延续只是每个格子按照某种规则放大或缩小。这个某种规则就是弗兰特法、底特律法、平均系数法、佛尼斯法的区别所在。1.2 增长系数法的共同前提和通用套路所有的增长系数法第一步都是先算出两个基础系数每个小区i的发生增长系数 (F_i^O O_i/O_i)每个小区j的吸引增长系数 (F_j^D D_j/D_j)。其中 (O_i)、(D_j) 是基年数据(O_i)、(D_j) 是未来目标值。有的教材把这两个系数分别写成 (P_i) 和 (A_j)意思一样只是符号习惯不同。共同套路是对基年OD矩阵中的每个格子 (t_{ij})用某个组合方式把 (F_i^O) 和 (F_j^D) 合并成一个综合增长系数乘到 (t_{ij}) 上得到未来的预测值 (T_{ij})。关键就是这个合并方式——是取平均、取乘积、还是做比值。四种方法的分野全在这里。需要特别提醒的是所有增长系数法都有一个共同的隐含前提基年OD表必须可靠、区划保持稳定、未来土地使用格局和交通网络格局没有根本性变化。如果规划期内要建一条新跨江通道、开发一个全新片区这种结构性变化增长系数法是抓不住的这时候该用重力模型或离散选择模型而不是硬套增长系数法。2. 平均系数法最直观的增长率折中2.1 核心公式与计算逻辑平均系数法的思路简单得近乎朴素某个OD对 (i \to j) 的增长既不能只看出发区的增长也不能只看到达区的增长那就取两者的算术平均吧。公式写成[ T_{ij} t_{ij} \times \frac{F_i^O F_j^D}{2} ]这里的逻辑是折中如果出发区增长快、到达区增长慢那这两个区之间的出行按它们平均值增长。比如出发区发生量翻倍到达区吸引量只增长两成那么这两个区之间的出行量按六成的速度增长——看上去很合理也很容易解释。2.2 一个小算例平均系数法是怎么算出未来OD的我用一个三小区的算例来演示。基年OD矩阵如下单位万次/日小区123现状发生量O_i1-10050150280-6014034070-110现状吸引量D_j120170110400未来各小区的发生量 (O_i) 和吸引量 (D_j) 分别为小区1是250和220小区2是300和280小区3是200和250总量都是750万次/日。先算增长系数小区F_i^OF_j^D11.6671.83322.1431.64731.8182.273用平均系数法算第一轮(T_{12} 100 \times (1.667 1.647)/2 165.7)(T_{13} 50 \times (1.667 2.273)/2 98.5)(T_{21} 80 \times (2.143 1.833)/2 159.0)(T_{23} 60 \times (2.143 2.273)/2 132.5)(T_{31} 40 \times (1.818 1.833)/2 73.0)(T_{32} 70 \times (1.818 1.647)/2 121.3)第一轮算完行和分别是264.2、291.5、194.3列和分别是232.0、287.0、231.0和未来目标值250/300/200、220/280/250对不上。这说明一次计算往往不能直接满足控制总量需要把算出的结果当作新的基年OD重新算增长系数再迭代直到行和列和都收敛到目标值。2.3 平均系数法的优点和致命短板优点是简单直观、容易向非专业背景的决策者解释手算都很方便适合作为教学入门。缺点是收敛性一般经常需要多轮迭代才能让行和列和同时接近目标而且它本质上假设所有OD对这一对增长系数的响应都是线性的忽略了不同区位、不同距离的差异性。实际项目中如果只是做远景方案的粗筛、或者数据精度很低的时候用它定一个大致量级可以但要落到工程成果上就太粗糙了。3. 底特律法用宏观增长率做分母修正3.1 核心公式与思想底特律法不甘心只取平均。它的想法是出发区和到达区的增长都应该被充分考虑所以先把两个增长系数相乘但相乘之后数值往往会偏大因为两个大于1的系数乘起来会迅速膨胀所以再用全区总增长系数来拉回来。公式是[ T_{ij} t_{ij} \times \frac{F_i^O \times F_j^D}{F_{all}} ]其中 (F_{all} T/T)也就是未来总量除以基年总量。在算例里总量从400万增长到750万(F_{all} 750/400 1.875)。为什么乘完了还要除以总量增长率可以这样理解(F_i^O \times F_j^D) 反映的是这个OD对在两个端点的综合增长压力但如果每个格子都按这个乘积去放大加总起来必然超过全区总量目标。除以 (F_{all})等于把全区总量增长的基准线剥离掉保留的是各OD对相对于全区平均水平的差异。这个思想其实已经有点约束总量的味道了。3.2 底特律法在同一个算例里的表现用同一套数据算底特律法第一轮(T_{12} 100 \times (1.667 \times 1.647 / 1.875) 146.4)(T_{13} 50 \times (1.667 \times 2.273 / 1.875) 101.0)(T_{21} 80 \times (2.143 \times 1.833 / 1.875) 167.6)(T_{23} 60 \times (2.143 \times 2.273 / 1.875) 155.9)(T_{31} 40 \times (1.818 \times 1.833 / 1.875) 71.1)(T_{32} 70 \times (1.818 \times 1.647 / 1.875) 111.8)这一轮的行和是247.4、323.5、182.9列和是238.7、258.2、256.9。注意看底特律法第一轮的列和已经比平均系数法更接近目标值一些尤其是总体的数量级更稳。这是因为它用 (F_{all}) 控制了整体规模不会出现某个方向过度膨胀。但底特律法有个毛病如果某个OD对的两个增长系数差异很大比如出发区增长很猛但到达区几乎不增长分子是猛乘小结果可能反而偏低。它把总量增长作为统一基准实际上隐含了各区域增长速度差异被全区平均值压平的假设这在区域发展极不均衡时会失真。3.3 底特律法的适用条件底特律法适合总体增长稳定、各小区增长速度差距不太悬殊的情况。比如一个城市的各片区都在协同开发整体增长倍数能代表大多数区域的状态。这种方法的计算量也不大适合做方案阶段的多情景测试。但它对零增长很敏感——如果某个小区未来吸引量不增长(F_j^D 1)对应列的所有OD对都被压缩可能会得不到符合直觉的结果。4. 弗兰特法把阻抗放进增长系数4.1 核心公式与空间交互逻辑弗兰特法可以说是底特律法的升级版。它的公式长这样[ T_{ij} t_{ij} \times \frac{F_i^O \times F_j^D}{\frac{F_i^O F_j^D}{2}} ]分子和底特律法一样是增长系数的乘积区别在于分母底特律法用一个全区共同的总增长系数弗兰特法用的是这个OD对自身两个增长系数的算术平均值。这样改有什么好处如果出发区和到达区的增长系数正好相等那分母就等于这个系数分子除以分母就等于自己相当于按该系数直线放大。如果出发区增长率远高于到达区分子是两个系数的积分母是它们的平均值综合结果会落在两者乘积和平均值之间——相当于是用一种较硬的折中来抑制过高的乘积。这个机制本质上考虑了空间交互的非线性两个端点增长得越不一样它们之间的出行增长越会被拉回一个合理水平。这也是为什么弗兰特法在处理不均衡发展时比底特律法更细腻。4.2 弗兰特法算例计算继续用三小区数据算(T_{12} 100 \times (1.667 \times 1.647) / 1.657 165.7)(T_{13} 50 \times (1.667 \times 2.273) / 1.970 96.2)(T_{21} 80 \times (2.143 \times 1.833) / 1.988 158.0)(T_{23} 60 \times (2.143 \times 2.273) / 2.208 132.4)(T_{31} 40 \times (1.818 \times 1.833) / 1.826 73.0)(T_{32} 70 \times (1.818 \times 1.647) / 1.733 121.0)第一轮行和是261.9、290.4、194.0列和是231.0、286.7、228.6。和底特律法相比弗兰特法在小区2列的值更高一些小区3列略低这反映了它没有把全区平均增长率强加给所有OD对而是let每一对的增长率自己说话。在实际项目里弗兰特法最大的价值是对跨区联系强的OD对更敏感。比如一个中心的就业岗位大增但周边居住人口没怎么变这种单向吸引型的OD对弗兰特法能让它更贴合目标列的吸引量不会像底特律法那样被总量增长率拖后腿。4.3 弗兰特法的效应与限制弗兰特法也并非万能。它的公式里没有显式的阻抗函数只是通过增长系数的组合间接反映空间结构因此在处理长距离出行时它不会像重力模型那样因为距离增加而自动衰减。另外弗兰特法对基年OD矩阵中数值为0的格子很麻烦——如果 (t_{ij}0)无论如何放大都是0无法产生从无到有的新出行。这是所有增长系数法的通病但在弗兰特法里尤其需要注意因为它的分母很接近增长系数的平均值一旦某个增长系数为0比如未来某小区不发生量公式会直接失效。5. 佛尼斯法双约束下的收敛博弈5.1 双约束增长系数法思路前面三种方法都是一锤子买卖式的综合系数法算完一轮再迭代。佛尼斯法换了一种思路我不搞那么复杂的合并公式直接把行约束和列约束分开处理轮流满足。它的核心是两步交替迭代先做行调整 [ T_{ij}^{(k)} t_{ij}^{(k-1)} \times \frac{O_i}{O_i^{(k-1)}} ]再做列调整 [ T_{ij}^{(k1)} T_{ij}^{(k)} \times \frac{D_j}{D_j^{(k)}} ]也就是说第一步先保证每个小区的发生量完全等于未来目标值这时列和肯定不对第二步再调整列让每个小区的吸引量等于目标值但列调整完行和又被破坏了于是再回到第一步。如此反复行和列和轮流被拉向目标像拉锯战一样一点点逼近。这就是为什么佛尼斯法也叫双约束增长系数法。5.2 算例佛尼斯法是怎么逐步逼近的第一轮行调整直接把基年OD按发生增长系数放大(T_{12} 100 \times 1.667 166.7)(T_{13} 50 \times 1.667 83.3)(T_{21} 80 \times 2.143 171.4)(T_{23} 60 \times 2.143 128.6)(T_{31} 40 \times 1.818 72.7)(T_{32} 70 \times 1.818 127.3)行和严格满足250、300、200。此时列和是244.1、294.0、211.9和目标220、280、250有偏差。做列调整(T_{12} 166.7 \times (280/294.0) 158.7)(T_{13} 83.3 \times (250/211.9) 98.3)(T_{21} 171.4 \times (220/244.1) 154.4)(T_{23} 128.6 \times (250/211.9) 151.7)(T_{31} 72.7 \times (220/244.1) 65.5)(T_{32} 127.3 \times (280/294.0) 121.2)列和现在严格满足220、280、250但行和变成257.0、306.1、186.7。继续第二轮行调整系数分别是250/257.00.973、300/306.10.980、200/186.71.071。乘回去以后行和又满足目标列和变成221.6、284.2、244.3已经比第一轮更接近目标了。再调一轮列行和变成249.9、302.4、197.6。也就是说第三轮结束时行和列和都已经误差小于1%可以认为收敛。从这个过程能直观感受到佛尼斯法收敛效率高一般3到5轮就能达到工程可用精度这就是它比前三种方法更适合实际项目的原因。5.3 收敛判据和迭代技巧实际做项目时收敛判据常用相对误差[ \max\left( \left|\frac{O_i - O_i^{(k)}}{O_i}\right|, \left|\frac{D_j - D_j^{(k)}}{D_j}\right|\right) \le \varepsilon ]工程上一般取 (\varepsilon 0.01) 到 (0.03)也就是误差控制在1%~3%以内。取多少要看数据精度基年OD本来就是调查估算出来的没必要把收敛误差压到0.1%以下算得再精细也消除不了调查误差。佛尼斯法偶尔也会遇到收敛慢甚至震荡的情况尤其是矩阵中存在极端增长系数时。我的经验是可以加一个阻尼系数比如每次调整时实际取0.8倍的调整量后面的0.2倍保留一步缓冲或者对增长率设定一个合理上限比如单轮调整倍数限制在0.3~3.0之间防止个别小区因基年数据太小而出现急剧波动。6. 四种方法到底怎么选对比与实战经验6.1 横向对比表四种方法的核心差异用一个表就能看明白方法综合增长系数形式核心特征优缺点典型适用场景平均系数法((F_i^O F_j^D)/2)算术平均简单直观、收敛慢、精度一般教学示例、粗略估算底特律法(F_i^O \times F_j^D / F_{all})以全区总量增长为基准总量稳定性好、区域差异敏感度低总体稳定、增长均衡的区域弗兰特法(F_i^O \times F_j^D / ((F_i^OF_j^D)/2))用两端增长系数平均值做分母空间交互感强、对不均衡增长更细致开发不平衡、跨区联系强的场景佛尼斯法行/列交替迭代双约束逐轮逼近严格满足发生吸引总量、收敛可控工程实际项目最常用6.2 我在交通规划项目里的选型建议先说结论如果是正式的综合交通规划项目我默认会用佛尼斯法。理由是它天然满足未来OD矩阵行和等于各小区发生量、列和等于各小区吸引量这两个硬约束而这正是后续交通分配的前提。模型师最怕的就是OD总量对不上分配时路段流量怎么标定都不合理。佛尼斯法能省掉这一层麻烦。底特律法和弗兰特法在特定的政策测试场景里更合适。比如你要测试某个片区就业大幅增长对周边路网的压力而这个片区恰恰是吸引端快速增长用佛尼斯法当然也能算但用弗兰特法能更突出该片区吸引量增长对特定OD对的影响做敏感性分析时结果更有解释力。平均系数法我基本只在学校作业和培训里用实际项目里几乎不用因为它的收敛性不够稳定迭代次数多解释起来还绕。另外一个经常被忽略的点是这四种方法算出来的是未来趋势型OD不是目标型OD。增长系数法默认基年的出行分布结构是合理的、会延续下去的。如果规划目标是打破现状格局比如要引导城市单中心向多中心转变那就必须在生成阶段调整好各小区的发生量和吸引量靠OD矩阵的约束迭代来体现结构变化而不是指望方法本身帮你造出一个新模式。6.3 容易踩的坑与实操建议最后分享几个实操中反复踩过的坑。第一个坑是基年OD表里出现0值或者极小的值。佛尼斯法迭代时0值的格子永远出不来新出行这一点可以通过对基年矩阵做预处理来缓解比如把OD调查中的抽样误差、未回答项补充进来或者对极小的OD对人为设定一个下限值。如果项目里有某个格子明明是0但未来应该有出行建议直接用重力模型或直接把已知的规划出行量填进去别指望增长系数法变魔术。第二个坑是区域合并导致的对角线问题。很多基年OD表里把区内出行也放进去了但增长率计算时用的发生量和吸引量往往又来自另一个口径两者对不上的情况经常出现。我的习惯是先明确矩阵元素是否包含区内出行如果不含那发生量和吸引量也要用不含区内出行的口径否则算出来的增长率会整体偏高未来OD随之虚胖。第三个坑是迭代不收敛时不要盲目加迭代次数。先检查是不是某个小区的目标发生量或吸引量跟基年相比变化超过3倍以上如果是佛尼斯法可能会震荡得很厉害。这种情况下可以对该小区的增长系数做限幅或者把目标年分期处理比如先预测2028年、再预测2035年让模型分步逼近而不是一步跨到终点。我做过一个城市十年期的快速路网规划当时有一个远郊新城目标发生量增长了6倍佛尼斯法直接算到第10轮还在小幅震荡后来改成先跑2025年中间方案再跑到2035年三轮就稳定下来了。第四个坑是把四种方法的结果当成绝对预测值来汇报。增长系数法输入的基年OD本身就有不确定性输出的值天然也是区间概念。正式成果里我一般建议同时给出基于佛尼斯法的推荐方案和基于弗兰特法底特律法上下限的敏感性区间这样评审专家看到的不只是一个数值而是一套对不确定性有认知的分析过程。说到底弗兰特法、底特律法、平均系数法、佛尼斯法这四种方法本质上不是互相竞争的关系而是同一个增长系数思想在不同约束条件下的变体。弄懂了它们之间的公式差异、收敛特性和适用场景你就能在项目里游刃有余地选方法、调参数、做判断。希望这份拆解能帮你少走点弯路。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价