配流01—DIAL算法(经典)
function dialsuanfa(T)
%程序说明
clc
disp('========================================================================================');
disp(' 《基于LOGIT的STOCH配流法——dial算法》');
disp('运行环境:MATLAB 8.3.0.532 ');
disp('作者信息:兰州交通大学 刘志祥 QQ:531548824');
disp('说明:本程序用于进行静态配流,缺点是有效路径的界定太过严,请读者根据需要进行修改。');
disp(' dial算法分四大步骤:一是求最短路,二是求边权似然数,三是求路权,四是配流');
disp('========================================================================================');
disp('按任意键继续...');
pause;
%数据获取,人机交互
disp('请按照提示输入以下参数');
Q=input('总需求量 :');
thita=input('参数thita :');
r=input('起 点 :');
s=input('终 点 :');
n=size(T,1);
%初始化
L=zeros(n,n);
W=zeros(n,n);
X=zeros(n,n);
%求最短距离矩阵
disp('第一步:求最短距离,其中');
disp('------------------------------------------------------------------------------------------');
disp(' R—起点r到其他点的最短距离');
disp(' S—其他点到终点s的最短距离');
disp('按任意键继续...');
pause;
Tmin=zuiduanjulijuzhen(T);
R=Tmin(r,:)
S=Tmin(:,s)'%注意因为方向性,这里作转置处理
%找上游节点和下游节点(显然up和down互为转置——对称,因为若j是i的下游节点,则i必是j的上游节点)
for i=1:n
for j=1:n
if T(i,j)~=0&&T(i,j)~=inf
down(i,j)=1;
up(j,i)=1;
else
down(i,j)=0;
up(j,i)=0;
end
end
end
down;
up;
%计算边权
disp('第二步:计算边权似然值(任意键继续)');
disp('------------------------------------------------------------------------------------------');
pause;
for i=1:n
for j=1:n
if down(i,j)~=0
if R(i)<R(j)&&S(i)>S(j)
P=1;
else
P=0;
end
L(i,j)=P*exp(thita*(R(j)-R(i)-T(i,j)));
end
end
end
L
%计算路权
disp('第三步:计算路权(任意键继续)');
disp('------------------------------------------------------------------------------------------');
pause;
for i=1:n
for j=1:n
if down(i,j)~=0
if R(i)<R(j)&&S(i)>S(j)
if i==r
W(i,j)=L(i,j);
else
W(i,j)=L(i,j)*(up(i,:)*W(:,i));
%这是核心句,先找到上游节点,再写出上游节点到i的W值(若还没有,则递归直到能够算出),请仔细查阅路权的算法好好理解。
end
end
end
end
end
W
%配流
disp('第四步:配流(任意键继续)');
disp('------------------------------------------------------------------------------------------');
pause;
for i=n:-1:1
for j=n:-1:1
if down(i,j)~=0
if R(i)<R(j)&&S(i)>S(j)
if j==s
X(i,j)=Q*W(i,j)/((up(j,:)*W(:,j)));
else
X(i,j)=X(j,:)*down(j,:)'*W(i,j)/(up(j,:)*W(:,j));
%注意X(j,:)是1*n行向量,down(j,:)是1*n行向量,因此要将down向量转置为1*n的列向量才能相乘。
end
end
end
end
end
X
disp('==========================================================================================');
disp('<程序运行完毕>');
例:某路网如图所示,阻抗已标注于边上(这里阻抗用距离值表示),总需求为1000,起点为v1,终点为v9,θ=1。请用经典dial算法进行配流。
解:(1)写权值矩阵
quanzhijuzhen=[
0 2 Inf 2 Inf Inf Inf Inf Inf
Inf 0 2 Inf 2 Inf Inf Inf Inf
Inf Inf 0 Inf Inf 2 Inf Inf Inf
Inf Inf Inf 0 1 Inf 2 Inf Inf
Inf Inf Inf Inf 0 1 Inf 2 Inf
Inf Inf Inf Inf Inf 0 Inf Inf 2
Inf Inf Inf Inf Inf Inf 0 2 Inf
Inf Inf Inf Inf Inf Inf Inf 0 2
Inf Inf Inf Inf Inf Inf Inf Inf 0];
(2)带入程序(格式整理后输出如下)
说明:图形表示如下
配流01—DIAL算法(经典)相关推荐
- 配流02—DIAL算法(改进)
欢迎使用Markdown编辑器写博客 function dialsuanfaxishujuzhen(T) %程序说明 clc disp('=============================== ...
- Algorithm之PrA:PrA之IP整数规划(包括0-1整数规划)算法经典案例剖析+Matlab编程实现
Algorithm之PrA:PrA之IP整数规划算法经典案例剖析+Matlab编程实现 目录 分枝定界法 整数规划例题 0-1整数规划实例 分枝定界法 对有约束条件的最优化问题(其可行解为有限数)的所 ...
- 综合算法03—FrankWolfe_BPR配流算法
%% 算法符号及程序说明 %说明:本程序为采用美国联邦公路阻抗函数BPR时的frankwolfe算法,考虑了换乘(已经将等待时 %间考虑在内并在K短路的确定过程中计算)及拥挤附加时间,在路网情况已知时 ...
- 配流05—增量配流算法
说明:指定两点间的客流需求总量,建立费用函数(阻抗函数),一般情况下费用是流量的函数,就可以运用增量配流法配流,核心还是全有全无算法,只是该方法把流量等分为N份,每次全有全无配流1份,直至流量全部被加 ...
- 配流03—全有全无配流算法(1)
说明:指定两点间的客流需求总量,建立费用函数(阻抗函数),一般情况下费用是流量的函数,就可以运用全有全无算法进行配流. step1:建立费用函数m文件:feiyonghanshu.m function ...
- DIAL算法计算单位流率-python实现
dail算法 DIAL算法又称STOCH算法,它基于路段分配流量,并将OD量仅仅加载到连接OD对的有效路径上,成功避免了路径枚举,被公认为是相当高效的Logit型随机网络加载算法.也就是说,DIAL算 ...
- 限流——漏桶算法和令牌桶算法的区别
文章目录 限流 漏桶算法 令牌桶算法 漏桶算法和令牌桶算法的区别 时间窗口 时间窗口和令牌桶优缺点 限流 在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流 缓存:缓存的目的是提升系统访问速度 ...
- Algorithm之PrA:PrA之LP线性规划算法经典案例剖析+Matlab编程实现
Algorithm之PrA:PrA之LP线性规划算法经典案例剖析 目录 一.以例题分析步骤理解LP线性规划算法 二.Matlab编程实现 三.将问题可以转化为线性规划的问题 四.建模思路全过程 一.以 ...
- 车道线检测算法经典编程
车道线检测算法经典编程 车道线曲线拟合算法编程 计算经过(50,50),(90,120),(70,200)三点的Catmull_Rom样条曲线. IplImage* img = cvCreateIma ...
最新文章
- mysql 源头锁,mysql 使用手册 - 追梦,一个伟大程序员的源头。 - OSCHINA - 中文开源技术交流社区...
- [转] Ubuntu/Linux Mint/Debian 安装 Java 8
- Serverless X OpenKruise 部署效率优化之道
- python线程监控_Python实现线程状态监测简单示例
- 调整linux系统时区
- (STL,set,priority_queue)丑数
- 【参与开源】J2EE开源项目JEECG快速开发平台,欢迎广大技术爱好者参与,第三期招募新成员
- linux内核开源不能仿照_Linux内核开发,开源生产力工具,使用Google应用程序创建自动日历等
- 白月黑羽教python_白月黑羽Python在线教程
- python mysql编码_Python和MySql:Unicode和编码
- 以锅炉安全为例,台账管理在安全建设中的作用
- 遗传算法bp神经网络原理,bp神经网络和遗传算法
- 定积分证明题例题_一个广义积分不等式证明(送给数学分析同学)
- 【Python】全局变量(含义、使用要求、代码调试步骤)
- 任正非、董明珠、曹德旺,中国实业三大网红!他们有个共同点:坚决不做一件事!
- python ansible
- java葫芦娃喜羊羊格斗_课内资源 - 基于JAVA的葫芦娃大战妖怪
- Leetcode 32 最长合法括号子序列
- intell IDE初始用
- 服务器 u盘制作系统盘,制作U盘系统盘(WinToFlash)