配流07—基于BPR函数的Frank Wolfe算法
一、问题描述
在道路网中,已知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算法相关推荐
- 配流05—增量配流算法
说明:指定两点间的客流需求总量,建立费用函数(阻抗函数),一般情况下费用是流量的函数,就可以运用增量配流法配流,核心还是全有全无算法,只是该方法把流量等分为N份,每次全有全无配流1份,直至流量全部被加 ...
- 综合算法03—FrankWolfe_BPR配流算法
%% 算法符号及程序说明 %说明:本程序为采用美国联邦公路阻抗函数BPR时的frankwolfe算法,考虑了换乘(已经将等待时 %间考虑在内并在K短路的确定过程中计算)及拥挤附加时间,在路网情况已知时 ...
- 配流01—DIAL算法(经典)
function dialsuanfa(T) %程序说明 clc disp('============================================================= ...
- 配流02—DIAL算法(改进)
欢迎使用Markdown编辑器写博客 function dialsuanfaxishujuzhen(T) %程序说明 clc disp('=============================== ...
- 程序设计-在校整理-07 基于机器学习算法的DGA域名识别(NB、XGboost、MLP初探)
[在校整理-07 基于机器学习算法的DGA域名识别(NB.XGboost.MLP初探)](注:仅供参考学习使用) 一.课题内容和要求 二.理论基础 2.1 DGA域名生成算法 2.2 DGA算法原理 ...
- 配流03—全有全无配流算法(1)
说明:指定两点间的客流需求总量,建立费用函数(阻抗函数),一般情况下费用是流量的函数,就可以运用全有全无算法进行配流. step1:建立费用函数m文件:feiyonghanshu.m function ...
- 优化思路千万种,基于下界函数的最优化效率如何?
作者丨stephenDC 来源 | 大数据与人工智能(ID:ai-big-data) 导读:生活中我们处处面临最优化的问题,比如,怎么样一个月减掉的体重最高?怎么样学习效率最高?怎么样可以最大化实现个 ...
- R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、基于自定义函数构建xgboost文本分类模型
R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.基于自定义函数构建xgboost文本分类模型 目录
- R语言编写自定义函数基于ggsumarystats函数计算每个分组的统计值、自定义可视化分组分面条形图,并在X轴标签下方添加分组对应的统计值(样本数N、中位数median、四分位数的间距iqr)
R语言编写自定义函数基于ggsumarystats函数计算每个分组的统计值.自定义可视化分组分面条形图,并在X轴标签下方添加分组对应的统计值(样本数N.中位数median.四分位数的间距iqr) 目录
- R语言gganimate包创建可视化gif动图、可视化动图:ggplot2可视化静态散点图、gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数
R语言gganimate包创建可视化gif动图.可视化动图:ggplot2可视化静态散点图.gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数 目 ...
最新文章
- mysql多表分页查询语句_Mysql多表分页查询
- 2.Java异常学习
- CactiEZ V10.1 中文版 Cacti中文解决方案+使用教程(1)
- 区域数据导入功能(pinyin4J使用)
- 我的 2021 年终总结
- IntelliJ IDEA---java的编译工具【转】
- java stream filter map collector使用
- 英特尔助力完善AI人才培养,携手微软共促地球可持续发展
- linux ssh 色彩,定制多彩缤纷的 Linux SSH,告别黑白灰!
- 真香!全场景AI计算开源框架MindSpore,我爱了
- I2C 总线协议详解
- 微星主板前面板耳机插孔无声音输出问题【已解决】
- 网络安全应急响应-恶意代码分析技术
- gyp ERR! stack Error: Can't find Python executable python, you can set the PYT HON env variable.
- 【20200422】编译原理课程课业打卡十七之求解文法FirstVTLastVT构造文法算符优先关系表
- 春招实习--海康威视凉--总结反思
- iPhone5s ios 12.5.4越狱后可以ssh登录但是不能打开界面
- 洛谷——P6409 [COCI2008-2009#3] KEMIJA(java实现)
- 怎么把移动硬盘挂载到linux,linux 如何挂载移动硬盘
- 写给2020:做一个有计划、有担当的人