一、问题描述

在道路网中,已知OD需求,路段走行时间,路段能力和路径路段关系,求流量的均衡分配结果。

二、算法描述

此处只给出大的步骤,精确的算法描述见第三节——算法程序。

step1:给定路网数据,OD需求,路段能力

step2:自动求出路径和路段数量,根据路段数量定义路段名,给定初始数据

step3:构造阻抗函数并求出初始阻抗,此处用BPR函数

step4:全有全无配流

step5:数据更新

step6:求目标函数值

step7:输出计算结果

三、算法程序

clear
clc
disp('========================================================================');
disp('                      《基于BPR函数的Frank Wolfe算法》');
disp('运行环境:MATLAB 8.3.0.532 ');
disp('制 作 人:兰州交通大学   刘志祥');
disp('Q      Q:531548824');
disp('=========================================================================');%% 1 给定路网数据,OD需求,路段能力
%算例1
%==========================================================================
% Q=1000;
% W=[5 6 6 8 3];
% Cmax=[600 500 600 500 700];
% Mxf=[1 0 0 1 0;1 0 1 0 1;0 1 0 0 1];
%==========================================================================%算例2
%==========================================================================
Q=3000;                                 %OD需求
W=[5 9 6 7 1];                          %路段初始阻抗
Cmax=700*ones(1,5);                     %路段能力
Mxf =[1 0 0 1 0;0 1 0 0 1;1 0 1 0 1];   %路径路段0-1关系
%==========================================================================%% 2 自动求出路径和路段数量,根据路段数量定义路段名,给定初始数据
%==========================================================================
numf=size(Mxf,1);
numx=size(Mxf,2);
syms lambda real
for i=1:numxsyms x(i) real;
end
cont=0;
e=inf;
x=x(1:numx);
X0=zeros(1,numx);
t=zeros(1,numx);
%==========================================================================%% 3 构造阻抗函数并求出初始阻抗,此处用BPR函数
%==========================================================================
t=W.*(1+0.15*(x./Cmax).^4);            %路段走行时间函数
tt=t;
t=W.*(1+0.15*(X0./Cmax).^4);
Ckrs=(Mxf*t')';                        %路径的走行时间初值
%==========================================================================%% 4 全有全无配流
%==========================================================================
[Min,index]=min(Ckrs);
X1=Mxf(index,:).*Q;                    %全有全无法为最短路径上的路段分配流量
%==========================================================================%% 5 数据更新
%==========================================================================
while e>1e-3                           %精度判断cont=cont+1;                       %迭代次数更新t=(W).*(1+0.15*(X1./Cmax).^4);     %路段时间跟新Ckrs=(Mxf*t')';                    %路径时间更新[Min,index]=min(Ckrs);Y1=Mxf(index,:).*Q;                %全有全无法求辅助流量S=Y1-X1;                           %搜索方向X2=X1+lambda*S;                    %先将X2用X1和lambda进行表达t=(W).*(1+0.15*(X2./Cmax).^4);     %含lambda的阻抗表达f=sum(S.*t,2);                     %2表示按行求和lambda1=double(solve(f));          %求解方程,确定步长。k=length(lambda1);                 %如步长lambda1的解不唯一,取实数,且大于0小于1;for m=1:kif lambda1(m,1)>=0&&lambda1(m,1)<=1lambda2=lambda1(m,1);endendX2=X1+lambda2*S;                   %得到下一步的流量值,且进行下一次迭代e=sqrt(sum((X2-X1).^2))/sum(X1);   %精度计算X1=X2;                             %流量更新
end
%==========================================================================%% 6 求目标函数值
%==========================================================================
Xx=zeros(numx,1);                      %积分下界
Xn=X1;                                 %积分上界
Zf=zeros(numx,1);                      %目标值元素初始化
for i=1:numxZf(i)=int(tt(i),Xx(i),Xn(i));      %对每一个路径积分
end
Z=sum(Zf);                             %总目标=各路径阻抗求和
%==========================================================================%% 7 输出计算结果
%==========================================================================
disp('*************************************************************************')
disp(['     迭代次数:',num2str(cont)]);
disp(['     误 差 值:',num2str(e)]);
disp(['     配流结果:',num2str(Xn)]);
disp(['     路径阻抗:',num2str(Ckrs)]);
disp(['     目 标 值:',num2str(Z)]);
disp('*************************************************************************')
%==========================================================================

四、算例及运行结果

1.算例

路网如图1,已知起点v1,终点v4,路段编号如图1所示,路段初始阻抗为W=[5 9 6 7 1],对应的路段能力为Cmax=[500 700 800 600 700],求流量分配结果。

2.运行结果

>> Frank_wolfe_BPR_jingdian

========================================================================《基于BPR函数的Frank Wolfe算法》
运行环境:MATLAB 8.3.0.532
制 作 人:兰州交通大学   刘志祥
Q      Q:531548824
=========================================================================
*************************************************************************迭代次数:13误 差 值:0.00083827配流结果:1347.6659      1652.3341      304.76636      1042.8996      1957.1004路径阻抗:61.5966      60.7377      61.0709目 标 值:62802.3986
*************************************************************************

3.数据整理

路段流量表
路段 a1 a2 a3 a4 a5
流量 1347.7 1652.3 304.8 1042.9 1957.1

五、结论及展望

基于BPR函数的FW算法是科学有效的配流算法,可以看到最终3条路径的阻抗基本相等,这符合均衡配流的预期结果。

六、代码下载

代码下载地址:待更新...

配流07—基于BPR函数的Frank Wolfe算法相关推荐

  1. 配流05—增量配流算法

    说明:指定两点间的客流需求总量,建立费用函数(阻抗函数),一般情况下费用是流量的函数,就可以运用增量配流法配流,核心还是全有全无算法,只是该方法把流量等分为N份,每次全有全无配流1份,直至流量全部被加 ...

  2. 综合算法03—FrankWolfe_BPR配流算法

    %% 算法符号及程序说明 %说明:本程序为采用美国联邦公路阻抗函数BPR时的frankwolfe算法,考虑了换乘(已经将等待时 %间考虑在内并在K短路的确定过程中计算)及拥挤附加时间,在路网情况已知时 ...

  3. 配流01—DIAL算法(经典)

    function dialsuanfa(T) %程序说明 clc disp('============================================================= ...

  4. 配流02—DIAL算法(改进)

    欢迎使用Markdown编辑器写博客 function dialsuanfaxishujuzhen(T) %程序说明 clc disp('=============================== ...

  5. 程序设计-在校整理-07 基于机器学习算法的DGA域名识别(NB、XGboost、MLP初探)

    [在校整理-07 基于机器学习算法的DGA域名识别(NB.XGboost.MLP初探)](注:仅供参考学习使用) 一.课题内容和要求 二.理论基础 2.1 DGA域名生成算法 2.2 DGA算法原理 ...

  6. 配流03—全有全无配流算法(1)

    说明:指定两点间的客流需求总量,建立费用函数(阻抗函数),一般情况下费用是流量的函数,就可以运用全有全无算法进行配流. step1:建立费用函数m文件:feiyonghanshu.m function ...

  7. 优化思路千万种,基于下界函数的最优化效率如何?

    作者丨stephenDC 来源 | 大数据与人工智能(ID:ai-big-data) 导读:生活中我们处处面临最优化的问题,比如,怎么样一个月减掉的体重最高?怎么样学习效率最高?怎么样可以最大化实现个 ...

  8. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、基于自定义函数构建xgboost文本分类模型

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.基于自定义函数构建xgboost文本分类模型 目录

  9. R语言编写自定义函数基于ggsumarystats函数计算每个分组的统计值、自定义可视化分组分面条形图,并在X轴标签下方添加分组对应的统计值(样本数N、中位数median、四分位数的间距iqr)

    R语言编写自定义函数基于ggsumarystats函数计算每个分组的统计值.自定义可视化分组分面条形图,并在X轴标签下方添加分组对应的统计值(样本数N.中位数median.四分位数的间距iqr) 目录

  10. R语言gganimate包创建可视化gif动图、可视化动图:ggplot2可视化静态散点图、gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数

    R语言gganimate包创建可视化gif动图.可视化动图:ggplot2可视化静态散点图.gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数 目 ...

最新文章

  1. mysql多表分页查询语句_Mysql多表分页查询
  2. 2.Java异常学习
  3. CactiEZ V10.1 中文版 Cacti中文解决方案+使用教程(1)
  4. 区域数据导入功能(pinyin4J使用)
  5. 我的 2021 年终总结
  6. IntelliJ IDEA---java的编译工具【转】
  7. java stream filter map collector使用
  8. 英特尔助力完善AI人才培养,携手微软共促地球可持续发展
  9. linux ssh 色彩,定制多彩缤纷的 Linux SSH,告别黑白灰!
  10. 真香!全场景AI计算开源框架MindSpore,我爱了
  11. I2C 总线协议详解
  12. 微星主板前面板耳机插孔无声音输出问题【已解决】
  13. 网络安全应急响应-恶意代码分析技术
  14. gyp ERR! stack Error: Can't find Python executable python, you can set the PYT HON env variable.
  15. 【20200422】编译原理课程课业打卡十七之求解文法FirstVTLastVT构造文法算符优先关系表
  16. 春招实习--海康威视凉--总结反思
  17. iPhone5s ios 12.5.4越狱后可以ssh登录但是不能打开界面
  18. 洛谷——P6409 [COCI2008-2009#3] KEMIJA(java实现)
  19. 怎么把移动硬盘挂载到linux,linux 如何挂载移动硬盘
  20. 写给2020:做一个有计划、有担当的人

热门文章

  1. LINUX内存管理子系统和进程管理子系统
  2. 软件设计实验一 UML建模实验
  3. Maxwell参数化建模和优化设计
  4. 如何快速掌握一门技术
  5. 经方的魅力第二版》读书摘录
  6. 1000mx3连电脑没声音_Mac电脑没声音了怎么办?解决Mac上声音问题
  7. 力扣HOT100题代码
  8. 为发泄对上司不满,百度95后程序员删库被判9个月
  9. html中加入计时器,javascript怎么做计时器?
  10. treeoj 1206~1208 1212