基于Matlab平台的图论模型的仿真实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第28卷㊀第8期长㊀春㊀大㊀学㊀学㊀报
Vol.28㊀No.8㊀2018年8月
JOURNALOFCHANGCHUNUNIVERSITY
Aug.2018㊀
收稿日期:2018 ̄04 ̄20
基金项目:山东科技项目(J15L157)
作者简介:孙建英(1979-)ꎬ女ꎬ山东烟台人ꎬ副教授ꎬ硕士ꎬ主要从事应用数学方面研究ꎮ
基于Matlab平台的图论模型的仿真实验
孙建英
(青岛理工大学琴岛学院ꎬ山东青岛266106)
摘㊀要:在Matlab2014a平台下ꎬ利用图论工具箱中的函数求解图论模型中的最短路㊁最大流和最小支撑树问题ꎮ用3个实例进行仿真ꎬ能快速方便地得到最优解ꎮ对图论模型的进一步研究有重要意义和实用价值ꎮ
关键词:最短路ꎻ最大流ꎻ最小支撑树ꎻMatlab2014a
中图分类号:O29㊀㊀㊀文献标志码:A㊀㊀㊀文章编号:1009-3907(2018)08-0021-04
㊀㊀图论模型是数学建模中一类非常重要的模型ꎬ它的应用非常广泛ꎮ购买机票㊁设备更新㊁配送路线选择等ꎬ都属于最短路径问题ꎻ景区的旅游车辆的最大通行量㊁石油管道的最大输送量等ꎬ都属于最大流问题ꎻ电线的架设问题㊁居民区的供水管道问题等ꎬ都属于最小支撑树问题ꎮMatlab2014a平台中的图论工具箱ꎬ可以实现图论模型的快速求解ꎬ不必编写复杂的程序ꎬ对计算机不是很懂的学者也可以很快地掌握ꎮ本文从3个实例出发ꎬ详细介绍了如何利用图论工具箱快速准确地求解图论模型中的最短路㊁最大流和最小支撑树问题ꎬ对图论模型的进一步研究有重要意义和实用价值ꎮ
1㊀预备知识
1.1㊀图论工具箱
Matlab2014a平台下图论工具箱中的相关函数ꎬ如表1所示ꎮ
表1㊀Matlab图论工具箱中的相关函数
函数名功能介绍
graphshortestpath求解无向图和有向图中任意指定顶点的最短距离和最短路径
graphmaxflow
求解有向图中的最大流
graphminspantree求解最小支撑树
1.2㊀稀疏矩阵
稀疏矩阵是指零元素很多ꎬ非零元素比较少的矩阵ꎮ
稀疏矩阵的存储方式:a(iꎬj)=mꎬ其中ꎬa表示稀疏矩阵ꎬi表示非零元素的行标ꎬj表示非零元素的列标ꎬm表示非零元素的数值ꎮ
稀疏矩阵的使用说明:1)有向图中ꎬ可以直接使用Matlab中的sparse命令ꎬ把邻接矩阵转化为稀疏矩阵ꎻ2)无向图中ꎬ由于Matlab只存储下三角矩阵中的非零元素ꎬ要先把邻接矩阵转置ꎬ再应用sparse命令ꎮ
2㊀实例仿真
2.1㊀最短路问题
例1购买机票问题[1]:某集团公司在六个城市C1ꎬC2ꎬ ꎬC6中有分公司ꎬ从Ci到Cj的直飞航程票价如表
2所示( - 表示无直飞航班)ꎮ如今ꎬ集团巡视组要分别从C1出发到其他城市去检查工作ꎮ请问:应该如何安排航班ꎬ方可使得票价最低?
22长㊀春㊀大㊀学㊀学㊀报㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第28卷
表2㊀各分公司所在城市之间的航程票价(单位:元)
C1C2C3C4C5C6
C10850-1400750600
C285001000800-500
C3-10000650820-
C41400800650013001250
C5750-82013000950
C6600500-12509500
㊀㊀解:Matlab程序:
clcꎬclear
a=zeros(6)ꎻ
a(1ꎬ2)=850ꎻa(1ꎬ4)=1400ꎻa(1ꎬ5)=750ꎻa(1ꎬ6)=600ꎻ
a(2ꎬ3)=1000ꎻa(2ꎬ4)=800ꎻa(2ꎬ6)=500ꎻ
a(3ꎬ4)=650ꎻa(3ꎬ5)=820ꎻ
a(4ꎬ5)=1300ꎻa(4ꎬ6)=1250ꎻ
a(5ꎬ6)=950ꎻ
a=a ꎻ
a=sparse(a)ꎻ
b=[1:6]ꎻ
[priceꎬpath]=graphshortestpath(aꎬ1ꎬbꎬ Directed ꎬ0)
运行结果:
price=
㊀㊀㊀0㊀㊀㊀㊀850㊀㊀㊀㊀1570㊀㊀㊀㊀1400㊀㊀㊀㊀750㊀㊀㊀㊀600
点击工作区中的pathꎬ出现path变量表ꎬ见表3ꎮ
表3㊀path变量
123456
1[1ꎬ2][1ꎬ5ꎬ3][1ꎬ4][1ꎬ5][1ꎬ6]
㊀㊀结果分析:C1直达到C2ꎬC4ꎬC5ꎬC6ꎬ票价分别为850ꎬ1400ꎬ750ꎬ600ꎻC1经C5
转机到C3ꎬ票价为750+820=1570ꎮ
2.2㊀最大流问题㊀
例2管道输流问题[1]:某石油公司拥有一个管道输送网络系统ꎬ如图1所示ꎬ使用该系统将石油从开采地A输送到销售地Gꎮ由于管道(以两个地点之间的弧表示)直径的变化ꎬ各段管道的容量是不一样的ꎬ弧上的数字意味着各管道的最大容量(单位:万加仑/小时)ꎮ请问:欲使得从开采地A到销售地G每小时输送的石油量最大ꎬ应采取什么样的配送方案?最大配送量是多少万加仑?
解:Matlab程序:
clcꎬclear
a=zeros(7)ꎻ
a(1ꎬ2)=6ꎻa(1ꎬ3)=8ꎻa(2ꎬ4)=3ꎻa(2ꎬ5)=6ꎻ
a(3ꎬ4)=4ꎻa(3ꎬ6)=1ꎻa(3ꎬ7)=3ꎻ
a(4ꎬ5)=3ꎻ
a(5ꎬ7)=5ꎻa(6ꎬ7)=4ꎻ
b=sparse(a)ꎻ[Maxflowꎬpath]=graphmaxflow(bꎬ1ꎬ7)ꎻPath=sparse(path)ꎻ
Maxflow
view(biograph(Pathꎬ[]ꎬ ShowArrows ꎬ on ꎬ ShowWeights ꎬ on ))运行结果:Maxflow=
9
图1㊀石油输送量最大的配送方案
2.3㊀最小支撑树问题
例3电线架设问题[2]:如图2ꎬS㊁A㊁B㊁C㊁D㊁E㊁T代表村镇ꎬ它们间连线表明各村镇间现有道路交通情
况ꎬ连线旁数字代表道路的长度ꎮ现要求沿途中道路架设电线ꎬ使上述村镇全部通上电ꎬ应如何架设使总的线路长度为最短?
解:Matlab程序
:图2㊀线路最短的电线架设方案
clcꎬcleara=zeros(7)ꎻ
a(1ꎬ2)=2ꎻa(1ꎬ3)=5ꎻa(1ꎬ4)=4ꎻa(2ꎬ3)=2ꎻa(2ꎬ5)=7ꎻa(3ꎬ4)=1ꎻa(3ꎬ5)=5ꎻa(3ꎬ6)=3ꎻ
a(4ꎬ6)=4ꎻa(5ꎬ6)=1ꎻa(5ꎬ7)=5ꎻa(6ꎬ7)=7ꎻa=a ꎻa=sparse(a)ꎻ[STꎬpred]=graphminspantree(aꎬ Method ꎬ Kruskal )ꎻ
st=full(ST)ꎻ
treelength=sum(sum(st))
view(biograph(stꎬ[]ꎬ ShowArrows ꎬ off ꎬ Show ̄Weights ꎬ on ))
运行结果:
treelength=14
3㊀结语
图论中的最短路㊁最大流和最小支撑树问题ꎬ在Matlab2014a平台下ꎬ可以利用图论工具箱快速地得到最优解ꎮ其实ꎬ运筹学中的很多模型ꎬ像整数线性规划和目标规划问题[3]等ꎬ也可以借助Matlab实现快速求解ꎮ但是还有很多问题ꎬ例如有初始可行流的最大流问题和最小费用最大流问题等ꎬ目前ꎬMatlab没有相应
3
2第8期孙建英:基于Matlab平台的图论模型的仿真实验