欢迎使用Markdown编辑器写博客

function dialsuanfaxishujuzhen(T)
%程序说明
clc
disp('======================================================================================');
disp('                   《基于LOGIT的STOCH配流法——改进的dial算法》');
disp('运行环境:MATLAB 8.3.0.532 ');
disp('制 作 人:兰州交通大学   刘志祥');
disp('Q      Q:531548824');
fprintf('说    明:本程序用于进行静态配流,在经典Dial算法的基础上进行修改,重新定义了有效路径,使得在用\n户的容忍绕路范围内比原来多走h倍路(一般情况下0<h<1,针对路段T(i,j)),即最多不超过2倍的路程,若\nh=0则等同经典算法.dial算法分四大步骤:一是求最短路,二是求边权似然数,三是求路权,四是配流\n');
disp('======================================================================================');
disp('按任意键继续...');
pause;%数据获取,人机交互
disp('    ***请按照提示输入以下参数***');
Q=input('总 需 求 量:');
thita=input('参 数 thita:');
h=input('容忍绕路倍数:');
r=input('起       点:');
s=input('终       点:');
n=size(T,1);%初始化
L=zeros(n,n);
W=zeros(n,n);
X=zeros(n,n);%求最短距离矩阵及最短路径
disp('step1->:求最短距离,其中');
disp('---------------------------------------------------------------------------------------');
disp('   R—起点r到其他点的最短距离');
disp('   S—其他点到终点s的最短距离');
disp('按任意键继续...');
pause;
for i=1:nfor j=1:nif T(i,j)==infT(i,j)=0;endend
end
T=sparse(T);
Tmin=graphallshortestpaths(T);
[dist,path]=graphshortestpath(T,r,s);
disp('________________________________________________________________');
R=Tmin(r,:)
S=Tmin(:,s)'%注意因为方向性,这里作转置处理
disp('________________________________________________________________');%画出初始图及最短路,边权为阻抗值t
disp('初始图及最短路径(红色)如图所示:');
chushitu=view(biograph(T,[],'showW','ON'));
set(chushitu.Nodes(path),'Color',[1 0 0]);
edges=getedgesbynodeid(chushitu,get(chushitu.Nodes(path),'ID'));
set(edges,'Linecolor',[1 0 0]);
disp('最短路径:');
path
disp('最短路距离:');
dist%找上游节点和下游节点(显然up和down互为转置——对称,因为若j是i的下游节点,则i必是j的上游节点)
for i=1:nfor j=1:nif T(i,j)>0down(i,j)=1;up(j,i)=1;elsedown(i,j)=0;up(j,i)=0;endend
end
down=sparse(down);
up=sparse(up);%计算边权
disp('step2->:计算边权似然值(任意键继续)');
disp('---------------------------------------------------------------------------------------');
pause;
for i=1:nfor j=1:nif down(i,j)if R(i)+T(i,j)-R(j)<(1+h)*T(i,j)&&S(j)+T(i,j)-S(i)<(1+h)*T(i,j)P=1;elseP=0;endL(i,j)=P*exp(thita*(R(j)-R(i)-T(i,j)));endend
end
L=sparse(L)
disp('边权如图所示:');
bianquantu=view(biograph(L,[],'showW','ON'));%计算路权
disp('step3->:计算路权(任意键继续)');
disp('---------------------------------------------------------------------------------------');
pause;
for i=1:nfor j=1:nif down(i,j)~=0if R(i)+T(i,j)-R(j)<(1+h)*T(i,j)&&S(j)+T(i,j)-S(i)<(1+h)*T(i,j)if i==rW(i,j)=L(i,j);elseW(i,j)=L(i,j)*(up(i,:)*W(:,i));%这是核心句,先找到上游节点,再写出上游节点到i的W值(若还没有,则递归直到能够算出),请仔细查阅路权的算法好好理解。endendendend
end
W=sparse(W)
disp('路权如图所示:');
luquantu=view(biograph(W,[],'showW','ON'));%配流
disp('step4->:配流(任意键继续)');
disp('------------------------------------------------------------------------------------------');
pause;
for i=n:-1:1for j=n:-1:1if down(i,j)==1if R(i)+T(i,j)-R(j)<(1+h)*T(i,j)&&S(j)+T(i,j)-S(i)<(1+h)*T(i,j)if j==sX(i,j)=Q*W(i,j)/((up(j,:)*W(:,j)));elseX(i,j)=X(j,:)*down(j,:)'*W(i,j)/(up(j,:)*W(:,j));%注意X(j,:)是1*n行向量,down(j,:)是1*n行向量,因此要将down向量转置为1*n的列向量才能相乘。endendendend
end
X=sparse(X)
disp('配流结果如图所示:');
peiliutu=view(biograph(X,[],'showW','ON'));
disp('======================================================================================');
disp('<程序运行完毕>');

例:某路网如图所示,阻抗已标注于边上(这里阻抗用距离值表示),需求为1000,起点为v1,终点为v9,θ=1,用户可容忍的绕路倍数为0.5.请用改进的ial算法进行配流。

解:(1)写权值矩阵

quanzhijuzhen=[0     2   Inf     2   Inf   Inf   Inf   Inf   InfInf     0     2   Inf     2   Inf   Inf   Inf   InfInf   Inf     0   Inf   Inf     2   Inf   Inf   InfInf   Inf   Inf     0     1   Inf     2   Inf   InfInf   Inf   Inf   Inf     0     1   Inf     2   InfInf   Inf   Inf   Inf   Inf     0   Inf   Inf     2Inf   Inf   Inf   Inf   Inf   Inf     0     2   InfInf   Inf   Inf   Inf   Inf   Inf   Inf     0     2Inf   Inf   Inf   Inf   Inf   Inf   Inf   Inf     0];

(2)带入程序(格式整理后输出如下)

dialsuanfaxishujuzhen(quanzhijuzhen)======================================================================================《基于LOGIT的STOCH配流法——改进的dial算法》
运行环境:MATLAB 8.3.0.532
制 作 人:兰州交通大学   刘志祥
Q      Q:531548824
说    明:本程序用于进行静态配流,在经典Dial算法的基础上进行修改,重新定义了有效路径,使得在用
户的容忍绕路范围内比原来多走h倍路(一般情况下0<h<1,针对论断T(i,j)),即最多不超过2倍的路程,若
h=0则等同经典算法.dial算法分四大步骤:一是求最短路,二是求边权似然数,三是求路权,四是配流
======================================================================================
按任意键继续...
    ***请按照提示输入以下参数***
总 需 求 量:1000
参 数 thita:1
容忍绕路倍数:0.5
起       点:1
终       点:9
step1->:求最短距离,其中
---------------------------------------------------------------------------------------
   R—起点r到其他点的最短距离
   S—其他点到终点s的最短距离
按任意键继续...
________________________________________________________________
R =0     2     4     2     3     4     4     5     6
S =6     5     4     4     3     2     4     2     0
________________________________________________________________
初始图及最短路径(红色)如图所示:

最短路径:
path =
     1     4     5     6     9
最短路距离:
dist =
     6
step2->:计算边权似然值(任意键继续)
---------------------------------------------------------------------------------------
L =
   (1,2)       1.0000
   (2,3)       1.0000
   (1,4)       1.0000
   (2,5)       0.3679
   (4,5)       1.0000
   (3,6)       0.1353
   (5,6)       1.0000
   (4,7)       1.0000
   (5,8)       1.0000
   (7,8)       0.3679
   (6,9)       1.0000
   (8,9)       0.3679
边权如图所示:

step3->:计算路权(任意键继续)
---------------------------------------------------------------------------------------
W =
   (1,2)       1.0000
   (2,3)       1.0000
   (1,4)       1.0000
   (2,5)       0.3679
   (4,5)       1.0000
   (3,6)       0.1353
   (5,6)       1.3679
   (4,7)       1.0000
   (5,8)       1.3679
   (7,8)       0.3679
   (6,9)       1.5032
   (8,9)       0.6386
路权如图所示:

step4->:配流(任意键继续)
------------------------------------------------------------------------------------------
X =
   (1,2)     298.1420
   (2,3)      63.1887
   (1,4)     701.8580
   (2,5)     234.9533
   (4,5)     638.6693
   (3,6)      63.1887
   (5,6)     638.6693
   (4,7)      63.1887
   (5,8)     234.9533
   (7,8)      63.1887
   (6,9)     701.8580
   (8,9)     298.1420
配流结果如图所示:

======================================================================================
<程序运行完毕>说明:显然改进的算法更符合实际情况,因为人们通常不会因为需要绕一点点路而长时间等待。

配流02—DIAL算法(改进)相关推荐

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

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

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

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

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

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

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

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

  5. DIAL算法计算单位流率-python实现

    dail算法 DIAL算法又称STOCH算法,它基于路段分配流量,并将OD量仅仅加载到连接OD对的有效路径上,成功避免了路径枚举,被公认为是相当高效的Logit型随机网络加载算法.也就是说,DIAL算 ...

  6. 吴恩达机器学习6——机器学习算法改进、系统设计

    吴恩达机器学习6 一.机器学习算法改进 1. 机器学习算法评价 1.1 评估模型 1.2 模型选择和交叉验证集 2. 偏差与方差 2.1 诊断偏差和方差 2.2 正则化和偏差/方差 2.3 学习曲线 ...

  7. 网络流初步:最大流(Dinic算法)

    网络流初步:最大流 标签: 网络流 最大流 Dinic 最大流 例题 POJ****(USACO4.2.1) 在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就积聚了一潭水.这意味着草地被水 ...

  8. CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用

    CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用 目录 基于tensorflow框架采用CNN(改进 ...

  9. 【文献阅读】多目标优化算法改进-Part1

    一.改进NSGA-Ⅱ算法 文献:改进NSGA-Ⅱ算法的动力总成悬置系统怠速振动优化 摘要:在NSGA-Ⅱ算法的基础上引入自适应遗传因子以提高其寻优性.收敛性,基于改进的NSGA-Ⅱ算法,使用 振型叠加 ...

最新文章

  1. Ext分区文件恢复工具extundelete
  2. Python3高并发定时更新任务进程池和线程池的使用
  3. Numpy.array矩阵百分制化(比例化)
  4. android 通知折叠点击,如何折叠Android通知?
  5. POJ - 4045 Power Station(树形dp/树的重心)
  6. Linux用户对System76的Darter Pro笔记本电脑的评论
  7. git 使用http方式的一个小问题
  8. HDOJ 2071 Max Num
  9. ad14 drc报错_AD怎么设置DRC检查常规检查项报错?
  10. MATLAB基础教程-台大郭彦甫-学习笔记
  11. 计算机英语拼读法,常用计算机英语词汇:DVD
  12. Learning Community Embedding with Community Detection and Node Embedding on Graphs
  13. 云呐|加强固定资产设备信息化管理工作
  14. 责任链模式:“张三为了纪念王二请假的悲催经历想出来的一种设计模式”
  15. STM32笔记 (十三)定时器输入捕获(利用定时器捕获高电平时间)
  16. 组织、结构与部分、整体
  17. 【云原生】阿里云服务器部署 Docker Swarm集群
  18. 学习记录--生成微信url schema
  19. 喜马拉雅xm文件格式转码为mp3格式
  20. 基于JAVA深州市特色蜜桃产业电子商务系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署

热门文章

  1. 这一次,为广州扛旗举鼎的为什么是融创文旅城?
  2. easyX中loadimage()函数共计有5个参数详解
  3. Android OpenMobileAPI、OMA、智能卡开发总结
  4. 微信公众平台开发之Java实现群发消息
  5. 【华为云CCE】 k8s部署nacos集群
  6. 让AI看哈利波特就为了学······剧透?!还能不能愉快的玩耍了?
  7. 想拥有一个自由时间的职业_如何以自由职业者的身份管理时间
  8. 浅谈使用Word和Baklib制作帮助文档区别
  9. 网页在线浏览ppt的实现
  10. 空值排序与时间倒叙问题