配流08—基于有效路径的Dial算法改进
来源:互联网 发布:拍拍网和淘宝网哪个好 编辑:程序博客网 时间:2024/04/29 06:07
《基于有效路径的Dial算法改进》
[1]刘志祥,陈明明,顾金伟. 基于有效路径的Dial算法改进[J]. 徐州工程学院学报(自然科学版),2017,(01):49-53.
说明:此文为《基于有效路径的Dial算法改进》的程序实现过程,参照原文请按以下连接下载。
下载地址:点击此处
1 经典Dial算法程序及算例
fprintf(' 《经典Dial算法》\n');disp('=========================================================================================');%% 数据输入T=[ 0 20 18 19 Inf Inf 0 5 Inf 20 Inf Inf 0 5 20 Inf Inf Inf 0 27 Inf Inf Inf Inf 0];Q=1;thita=1;r=1;s=5;n=size(T,1);fprintf('起点: r=%2d\n终点: s=%2d\n',r,s);%% 初始化L=zeros(n,n);W=zeros(n,n);X=zeros(n,n);%% 求最短距离矩阵disp('step1->:求最短距离,其中');disp('------------------------------------------------------------------------------------------');disp(' R—起点r到其他点的最短距离');disp(' S—其他点到终点s的最短距离');for i=1:n for j=1:n if T(i,j)==inf T(i,j)=0; end endendT=sparse(T);Tmin=graphallshortestpaths(T);[dist,path]=graphshortestpath(T,r,s);disp('------------------------------------------------------------------------------------------');R=Tmin(r,:)S=Tmin(:,s)'%% 求上下游节点矩阵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 endend%% 计算边权disp('step2->:计算边权似然值');disp('------------------------------------------------------------------------------------------');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 endendL%% 计算路权disp('step3->:计算路权');disp('------------------------------------------------------------------------------------------');for i=1:n for j=1:n if R(i)<R(j)&&S(i)>S(j) if down(i,j)~=0 if i==r W(i,j)=L(i,j); else W(i,j)=L(i,j)*(up(i,:)*W(:,i)); end end end endendW%% 配流disp('step4->:配流');disp('------------------------------------------------------------------------------------------');for i=n:-1:1 for j=n:-1:1 if R(i)<R(j)&&S(i)>S(j) if down(i,j)~=0 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)); end end end endendXdisp('==========================================================================================');
2 基于有效路径改进的Dial算法程序及算例
fprintf(' 《改进Dial算法》\n');disp('========================================================================================');T =[ 0 20 18 19 Inf Inf 0 5 Inf 20 Inf Inf 0 5 20 Inf Inf Inf 0 27 Inf Inf Inf Inf 0];n=size(T,1);Q=1;thita=1;r=1;s=5;H=0.2;% H=input('容忍系数=');fprintf('起点: r=%2d\n终点: s=%2d\n容忍系数: H=%.2f\n',r,s,H);%% 初始化L=zeros(n,n);W=zeros(n,n);X=zeros(n,n);%% 求最短距离矩阵及最短路径disp('step1->:求最短距离,其中');disp('---------------------------------------------------------------------------------------');disp(' R—起点r到其他点的最短距离');disp(' S—其他点到终点s的最短距离');T=sparse(T);Tmin=graphallshortestpaths(T);[dist,path]=graphshortestpath(T,r,s);disp('---------------------------------------------------------------------------------------');R=Tmin(r,:)S=Tmin(:,s)'disp('---------------------------------------------------------------------------------------');disp('最短路径:'); pathdisp('最短路距离:');dist%% 找上游节点和下游节点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 endend%% 计算边权disp('step2->:计算边权似然值');disp('---------------------------------------------------------------------------------------');for i=1:n for j=1:n if down(i,j) if R(i)+T(i,j)+S(j)<=(1+H)*Tmin(r,s) P=1; else P=0; end L(i,j)=P*exp(thita*(R(j)-R(i)-T(i,j))); end endendL%% 计算路权disp('step3->:计算路权');disp('---------------------------------------------------------------------------------------');for i=1:n for j=1:n if down(i,j)~=0 if R(i)+T(i,j)+S(j)<=(1+H)*Tmin(r,s) if i==r W(i,j)=L(i,j); else W(i,j)=L(i,j)*(up(i,:)*W(:,i)); end end end endendW%% 配流disp('step4->:配流');disp('----------------------------------------------------------------------------------------');for i=n:-1:1 for j=n:-1:1 if down(i,j)==1 if R(i)+T(i,j)+S(j)<=(1+H)*Tmin(r,s) 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)); end end end endendXdisp('========================================================================================');
3 算例运行结果
3.1 经典算法结果
>> dialsuanfa_jingdian 《经典Dial算法》=========================================================================================起点: r= 1终点: s= 5step1->:求最短距离,其中------------------------------------------------------------------------------------------ R—起点r到其他点的最短距离 S—其他点到终点s的最短距离------------------------------------------------------------------------------------------R = 0 20 18 19 38S = 38 20 20 27 0step2->:计算边权似然值------------------------------------------------------------------------------------------L = 0 1.0000 1.0000 1.0000 0 0 0 0 0 0.1353 0 0 0 0 1.0000 0 0 0 0 0.0003 0 0 0 0 0step3->:计算路权------------------------------------------------------------------------------------------W = 0 1.0000 1.0000 1.0000 0 0 0 0 0 0.1353 0 0 0 0 1.0000 0 0 0 0 0.0003 0 0 0 0 0step4->:配流------------------------------------------------------------------------------------------X = 0 71.5006 528.3221 0.1772 0 0 0 0 0 71.5006 0 0 0 0 528.3221 0 0 0 0 0.1772 0 0 0 0 0==========================================================================================
3.2 改进算法结果
>> dialsuanfa_gaijin 《改进Dial算法》========================================================================================起点: r= 1终点: s= 5容忍系数: H=0.20step1->:求最短距离,其中--------------------------------------------------------------------------------------- R—起点r到其他点的最短距离 S—其他点到终点s的最短距离---------------------------------------------------------------------------------------R = 0 20 18 19 38S = 38 20 20 27 0---------------------------------------------------------------------------------------最短路径:path = 1 3 5最短路距离:dist = 38step2->:计算边权似然值---------------------------------------------------------------------------------------L = 0 1.0000 1.0000 0 0 0 0 0.0009 0 0.1353 0 0 0 0 1.0000 0 0 0 0 0 0 0 0 0 0step3->:计算路权---------------------------------------------------------------------------------------W = 0 1.0000 1.0000 0 0 0 0 0.0009 0 0.1353 0 0 0 0 1.0009 0 0 0 0 0 0 0 0 0 0step4->:配流----------------------------------------------------------------------------------------X = 0 0.1199 0.8801 0 0 0 0 0.0008 0 0.1191 0 0 0 0 0.8809 0 0 0 0 0 0 0 0 0 0========================================================================================
4.结论
改进DIAL算法避免了经典Dial算法中,长路径分配流量,短路径不分配流量的错误,更加科学有效。
3 0
- 配流08—基于有效路径的Dial算法改进
- 配流02—DIAL算法(改进)
- 配流01—DIAL算法(经典)
- SPFA:改进的BellmanFord求单源最短路径算法
- 模式识别——基于ID3算法的三次改进
- 改进的有效边表算法,多边形的扫描转换
- 基于密度聚类算法的改进
- 【完结】基于upnp的DIAL协议的分析
- 基于蚁群算法的TSP问题的改进
- 基于KaKadu的JPEG2000解压缩算法的改进
- 讨论:一种基于状态位图的SPIHT改进算法(2)——编解码程序
- 基于大数据的推荐算法研究(2)——改进相似度
- 基于PCA的改进人脸识别算法—2DPCA(上篇)
- 基于网页分块的搜索引擎排序算法改进
- 一种基于邻接图模型的改进LDA算法
- 基于改进萤火虫优化算法的WSN覆盖优化分析
- 基于OpenCL的图像积分图算法改进
- 基于改进SURF算法的实时视频拼接
- Navicat导出mysql的查询结果为Excel文档
- ListView和ExpandableListView去除分隔线,ExpandableListView去除父布局的向下的图标和默认打开所有子布局,父布局没有点击事件
- Java实现redis的消息订阅和发布
- java byte[]与十六进制字符串相互转换
- LeetCode部分题解
- 配流08—基于有效路径的Dial算法改进
- scala--Scala 强大的集合数据操作示例
- The Stolen Tome
- Linux下为刚安装好的Eclipse在桌面建一个启动图标
- 数据库学习第八课
- Git的常用命令
- CTF解密图片得到flag
- EMVTag系列2《磁条等效数据》
- 创建Android虚拟设备(AVD)失败