资源描述
2013高教社杯全国大学生数学建模竞赛
承 诺 书
我们仔细阅读了《全国大学生数学建模竞赛章程》和《全国大学生数学建模竞赛参赛规则》(以下简称为“竞赛章程和参赛规则”,可从全国大学生数学建模竞赛网站下载)。
我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛章程和参赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守竞赛章程和参赛规则,以保证竞赛的公正、公平性。如有违反竞赛章程和参赛规则的行为,我们将受到严肃处理。
我们授权全国大学生数学建模竞赛组委会,可将我们的论文以任何形式进行公开展示(包括进行网上公示,在书籍、期刊和其他媒体进行正式或非正式发表等)。
我们参赛选择的题号是(从A/B/C/D中选择一项填写): C
我们的参赛报名号为(如果赛区设置报名号的话):
所属学校(请填写完整的全名): 河南科技大学
参赛队员 (打印并签名) :
指导教师或指导教师组负责人 (打印并签名):
(论文纸质版与电子版中的以上信息必须一致,只是电子版中无需签名。以上内容请仔细核对,提交后将不再允许做任何修改。如填写错误,论文可能被取消评奖资格。)
日期: 2013 年 8 月 27 日
赛区评阅编号(由赛区组委会评阅前进行编号):
15
2013高教社杯全国大学生数学建模竞赛
编 号 专 用 页
赛区评阅编号(由赛区组委会评阅前进行编号):
赛区评阅记录(可供赛区评阅时使用):
评
阅
人
评
分
备
注
全国统一编号(由赛区组委会送交全国前编号):
全国评阅编号(由全国组委会评阅前进行编号):
C题:供应链网络的建立与道路破坏问题
摘要
全球化竞争的加剧促使越来越多的企业开始采用供应链管理策略,以实现企业的一体化管理。现有某物流公司要在全国各城市之间建立供应链网络。需要选定部分城市作为供应点,将货物运输到各城市。
针对问题一,在49个城市中选取部分城市做为供给点供应本城市及其它城市,使得基建费用和运输费用达到最小,首先我们使用Floyd算法,对城市与城市之间的最短路程进行计算,得出城市与城市之间的最短路程的距离矩阵。列出相应的约束条件,利用Lingo进行求解得出总费用最小的供应点的取址,供应点分别为4、7、11、20、28、26、28、45,最小费用=9189288(元)。再通过Matlab作图,可以得到供应点以及每个供应点所供应的城市编号的货物运输路线图。
针对问题二,我们首先考虑当破坏任意一条路径时,将破坏的路径间的距离当成无穷大,建立相应的矩阵,利用Floyd算法,求得最短距离矩阵,得出破坏某条道路后,对某个供应点对其所供应的城市的运货路线的改变,求出其增加的费用。分别用这种方法求出其他的可以被破坏的路径时,其相应的增加的费用,建立新的运输路径,求出每个供应点增加的运输费用,在破坏路径尽能少的情况下,选择出相应条件下的破坏路径。
破坏的路径为4~3,4~5,45~17,20~19,20~21,,10~11,总费用11554007.5 (元)。
针对问题三,在已知破坏概率的条件下,求解破坏程度最大的方案。我们该首先利用前面两问把9条可破坏道路简化为7条,然后可破坏的7条道路进行分析,根据各城市周边道路数及运输能力,被破坏概率,对城市间道路破坏可行性,获得可选最优可破坏线路。继而结合相关数据得到加权值,遍历所有分区中的所有破坏组合,计算破坏与不破坏情况下资金损耗。选出最优组合。用Matlab编写穷举模型模程序拟逐步破坏道路,依此求得被破坏后的期望值。我们得到最佳的破坏方案为1、2、3、4、5、7。
关键词:Floyd算法 Lingo 最优解 Matlab
一、问题重述
全球化竞争的加剧促使越来越多的企业开始采用供应链管理策略,以实现企业的一体化管理。供应链是一个复杂的网状结构系统,每一部分都面临着各种潜在的风险,任何一部分出现问题都可能给整个供应链带来严重的影响,因此如何分析、评价和提高供应链系统的可靠性变得日益迫切。
现有某物流公司要在全国各城市之间建立供应链网络。需要选定部分城市作为供应点,将货物运输到各城市。设该公司考虑共考虑49个城市的网络,城市的坐标见表1。城市之间的道路连接关系见表2。在每个城市建立配送中心的固定费用和需求量表3。现将要建立一个供应网络,为各城市提供货物供应。货物运输利用汽车进行公路运输。设每吨每公里运输费用为0.5元。现提出如下问题:
1. 现在要从49个城市中选取部分城市做为供给点供应本城市及其它城市。建立供给点会花费固定费用,从供应点运输到需求点会产生运输费用,要使总费用最小,问建立多少个供应点最好。给出选中作为供应点的城市,并给出每个供应点供应的城市。同时根据坐标作出每一个供应点到需求点的连接图。
2. 假定有某组织对该供应网络的道路进行破坏。并非所有的道路都可以被破坏,可破坏的道路见表4。当某条道路被破坏后,该条道路就不能再被使用,以前运输经过该道路的只有改道,但总是沿最短路运输。如果破坏方选取的策略是使对方总费用增加25%,而每破坏一条道路都需要成本和代价,因此需要破坏最少的道路。问破坏方选取哪几条线路进行破坏。给出具体的破坏道路和总费用。
3. 假定各道路能否被破坏具有随机性,当某条道路被破坏后,该条道路就不能再被使用,以前运输经过该道路的只有改道,但总是沿最短路运输。由于破坏方选取一些边进行破坏时,这些边不一定被破坏,而是服从一定的概率分布。设可破坏的边及各边破坏的概率见表4。运输时产生的费用可按照各种情况下的平均费用来考虑。如果破坏方选取的策略是使对方平均总费用至少增加100%,同样需要破坏最少的道路。问破坏方将选取哪几条线路进行破坏。给出具体的破坏道路和平均总费用。
二、 模型假设
(1) 假设附表中所给数据真实、准确。
(2) 假设每个供应点的货物是充足的,可以充分满足相应城市的需求。
(3) 假设货物运输均是利用汽车进行公路运输。
(4) 假设各道路能否被破坏具有随机性,且被破坏后不能再被使用。
(5)假设公路运输畅通无阻。
三、 符号约定
(1)表示第i个城市到第j个城市直接相连的距离
(2)=1,表示在地建立供应点;=0,表示在地不建立供应点。
(3)表示由地往地运货,=1时,表示在建立供应点,且地接受地供 货;否则=0
(4)表示地的基建费用
(5)表示优化后的最小费用
(6)表示道路破坏前的总费用
(7)表示道路破坏前后增加的费用
(8)表示道路破坏后的总费用
四、 问题分析
在问题一中,在49个城市网络选取适当的供应点,使得基建费用和运输费用达到最小,对于该问题而言,首先我们使用Floyd算法,对城市与城市之间的最短路程进行计算,得出城市与城市之间的最短路程的距离矩阵。列出相应的约束条件,利用Lingo进行求解得出总费用最小的供应点的取址。由于在一些城市是不可以建立供应点的,且Lingo中不容易表示无穷大的数据,我们就将那些不能建立供应点的城市的基建费用尽可能扩大使其不能成为供应点。本题中的在不能建供应点,相对于能建供应点的地方其费用高得多,为了防止在求解过程中,选中这些不能建的地方,我们仍将这些数据扩大100倍,使其不可能被选中。
在问题二中,我们首先考虑当破坏任意一条路径时,将破坏的路径间的距离当成无穷大,建立相应的矩阵,将两个城市间的距离作为权,利用Floyd算法,求得最短距离矩阵,得出破坏某条道路后,对某个供应点对其所供应的城市的运货路线的改变,求出其增加的费用。分别用这种方法求出其他的可以被破坏的路径时,其相应的增加的费用,而从第一问的各城市间的路线连接图可知,到49这座城市的路线只有21~49,为了满足能让每个城市都能有货物,我们考虑这条路线不被毁坏,对于路线24~25,由于其破不破坏都对运输路线没影响所以也不考虑,故只用考虑7条路线。建立新的运输路径,求出每个供应点增加的运输费用,在破坏路径尽能少的情况下,选择出相应条件下的破坏路径。
在问题三中,在已知破坏概率的条件下,求解破坏程度最大的方案。我们该首先利用前面两问把9条可破坏道路简化为7条,然后可破坏的7条道路进行分析,根据各城市周边道路数及运输能力,被破坏概率,对城市间道路破坏可行性,获得可选最优可破坏线路。继而结合相关数据得到加权值,遍历所有分区中的所有破坏组合,计算破坏与不破坏情况下资金损耗。选出最优组合。用Matlab编写穷举模型模程序拟逐步破坏道路,依此求得被破坏后的期望值。
五、 模型建立与求解
5.1 问题一:
5.1.1 我们根据附件中的表一和表二,由Matlab在图上表示出各个城市的位置和他们之间的路径:
图1 各城市路径图
5.1.2 由Floyd算法知,我们先构造一个49 49的矩阵矩阵中的元素表示第i个城市到第j个城市直接相连的距离,若两城市间无直接相连的路径则用表示两者之间的距离。然后利用Floyd算法算出最短路径。
Floyd算法的步骤:
第一步:赋初值i=1;j=1;k=1;
第二步:>则=否则转到第三步;
第三步:j<49, 则令j=j+1;转到第二步,否则转到第四步;
第四步:i<49, 则令i=i+1;转到第二步,否则转到第五步;
第五步:k<49, 则令k=k+1,j=1,i=1, 否则输出;
将矩阵导入Matlab中,利用Floyd编程,求解最短路径矩阵,得到最短路径矩阵(由于矩阵太大,在问题一附件中给出部分最短路径矩阵)。得出最短路径后,为了确定供应点使得总费用最小,我们建立目标规划模型,来求得费用最优解。令=1,表示在地建立供应点;=0,表示在地不建立供应点。表示由地往地运货,=1时,表示在建立供应点,且地接受地供货;否则=0;用表示地的基建费用,由此我们建立目标函数:
= ①
约束条件:
由上述对的定义,可知;故可得约束条件:
得到目标函数和约束条件后,利用Lingo求其最优解。(Lingo编程及运行结果见问题一的附件),从Lingo的运行结果中我们能得到供应点的建立以及各供应点供应的城市。
表1 供应点与供应城市关系
供应点城市编号
接受供应点供应的城市编号
4
1,2,3,4,5,15,16,27,46,47
7
6,7,8,39,40,41,42
11
9,10,11,12,13,32,36,37,38,43
20
19,20,21,24,25,33,34,35,48,49
23
22,23
26
26
28
28,29,30,31
45
14,17,18,44,45
且得到优化后的最小费用=9189288(元)
通过Matlab结合画图板,可以得到供应点以及每个供应点所供应的城市编号的货物运输路线图。
图2 供应点到需求点连接图
其中红色显示的数字为可以建供应点的城市,黑体数字为接受货物供应的城市。
5.2 问题二:
利用Floyd算法,求得各个路径破坏后其供应点向各个城市的新的供应路线图。(由于矩阵数据太多,无法给出具体的过程)
图3 改道后的供应路线图
注:
图中的加粗间断的红线表示可能被破坏的路径;
蓝线和黑线表示某条路被破坏前相应的供应点运输路线;
绿线和黑线表示某条路被破坏后供应的供应点运输新路线;
我们将可能破坏的道路编号,得出某条道路被破坏前后导致运输费用增加的表格:
表2 新的供应路线及改道后增加费用
破坏的道路编号
破坏前路线
破坏后路线
增加的费用
1
4→3→1
4→16→3→1
704325.5
4→3→2
4→16→15→2
4→3→15
4→16→15
4→3
4→16→3
2
4→5
4→30→5
170808
4→5→47
4→30→47
3
45→17
45→18→17
247052
45→17→14
45→18→17→14
4
20→19
20→48→19
622092.5
20→19→33
20→48→19→33
20→19→34
20→48→19→34
20→19→35
20→48→19→35
5
20→21
20→19→21
48647.5
20→21→49
20→19→21→49
6
11→10
11→9→10
508039
11→10→12
11→9→10→12
11→10→38
11→9→10→38
11→10→43
11→9→10→43
7
7→40
7→6→40
49327
7→40→42
7→6→40→42
注:上表中1,2,3,4,5,6,7分别表示城市标号为4和3,4和5,45和17,20和19,20和21,10和11,7和40之间的道路。
在得到某道路被破坏后,由于需要重新选择运输路线,导致运输费用会变化,由于供应点的固定费用不变,所以增加的只是运输费用,再得到新的运输路线后,我们分别对某条道路破坏前后,导致相应的供应点对周围城市供应物品的运输费用增加。对于上面的表格,在确立了相应的供应点的某条道路被破坏后,算出新的路线所需费用,再和原来路线运输费用的差值,即得到新的路线所需增加的费用,即得到破坏某条道路增加的费用。
增加的费用=新的路线运输费用—原路线运输费用
由于城市编号为20和21,20和19之间单独考虑某条道路被破坏时规划的新路线会涉及到可能被破坏的路线,若是两者同时被破坏时,其增加的费用并非两个分别被破坏时增加的费用之和。此时新的路线为20→48→19;20→48→19→33;20→48→19→34;20→48→19→35;20→48→19→21;20→48→19→21→49。这样得到增加的费用为734567
从统计表中可以看到虽然在单独考虑城市编号为20和21的道路被破坏时,其增加的费用才46847.5,比破坏城市编号为7和40费用增加少,但当20和21,20和19都被破坏时,其运输增加的费用为112474.5,远高于7和40之间的费用。
对于该题,要使费用增加25%的基础上尽可能选择少的破坏道路,我们选择破坏的道路是费用增加的大的道路去破坏。
所需增加的费用:
②
是第一问中的最小费用
可能被破坏的道路按其破坏增加费用的高低,使其总费用大于或等于2297322元。
704325.5+734567+508039+247052+170808=2364791.5 ③
总费用为:
=2364719.5+9189288=11554007.5 (元) ④
故得相应破坏的路径为4~3,4~5,45~17,20~19,20~21,,10~11这几条。
5.3问题三:
每条道路破坏后增加的费用第二问已知,又知道每条道路破坏的概率,在此仍然认为8个供应点是固定的,所以建造供应点的基建费用是不变的,变化的是运输的平均费用。同样的对于路线24-25,由于其破不破坏都对运输路线和费用的增加没影响所以也不考虑,同时到49这座城市的路线只有21-49,为了满足能让每个城市都能有货物,我们也不考虑这条路被毁坏。
我们将问题简化为7条可破坏道路的问题,其破坏后增加的运输费用以及破坏概率如下表:
表3 破坏后增加的运输费用以及破坏概率
可破坏道路表号
1
2
3
4
5
7
9
城市A-城市B
4-5
4-3
7-40
10-11
19-20
17-45
20-21
增加的费用
170808
704325.5
49324
508039
622092.5
247052
48647.5
对应的概率
0.6
0.7
0.45
0.5
0.55
0.5
0.6
对于已知破坏概率的条件下,解破坏程度最大的方案,使得对方的平均总费用能够达到最大。我们首先根据各城市周边道路被破坏概率,求得被破坏后的期望值,用穷举模型模拟逐步破坏道路,求得道路被破坏的概率及未被破坏的概率。出各种方案的平均总费用,最后就可以得到相应的方案使平均总费用达到最大。
平均总费用由建造供应点的基建费用和各种情况下运输的平均费用组成,当给出道路破坏的方案后,由于8个供应点是固定的,所以建造供应点的基建费用是不变的,变化的是运输的平均费用。由于破坏方选取一些道路进行破坏时,这些边不一定被破坏,而是服从一定的概率分布。所以求运输的平均费用其实就是根据相应的概率分布求运输费用的期望值。 由于有 8 条道路可以被破坏,所以可以给出 255 种道路破坏方案。对于可破坏第8和9条道路,分别破坏和一起破坏对结果的影响较小,所以我们不予考虑,具体步骤如下:
步骤1:从可选的8条路中任选取1条,有个可能。记路为,为其被破坏的概率,()为其不被破坏的概率。记被破坏后费用为,破坏前费用为,其期望为,取平均费用为;
步骤2:从可选的8条路中任选取2条,有个可能。记概率为,重复步骤1求期望,取平均费用,取;
步骤3:重复前两部步骤,然后求的最大费用Max{ };
根据上面的分析,运用 Matlab 编写相应的程序(见附表)求平均总费最大。
运行程序得到结果为
表4 边数与增加费用表
边数
1
2
3
4
5
6
7
增加
费用
493000
829000
1070100
1178100
1283800
1323100
1323100
我们得到如图所示破坏后增加的费用与边数的变化:
图4 破坏后增加的费用与边数的变化图
从图中可以看出,随着破坏边数的增加,增加的平均最大费用刚开始增长较快,然后趋于平缓。因为根据上面的算法刚开始我们选的破坏边所增加的费用较多,所以会出现这种情况。当选择6到7条边时,费用基本不变。又因为每破坏一条道路都需要成本和代价,所以我们从7条边中选取6条,共有种情况,可以找出平均总费用最大时对应的道路破坏方案为1、2、 3、 4、 5、 7。
破坏后的费用为:
==9189288+1323100= 10512388 (元)
六、 模型评价
6.1 模型优点
(1) 模型建立的合理性。模型的建立是在对样本数据进行充分挖掘的基础之上,所有数据都得到充分利用,进行合理假设,建立模型。
(2) 解决问题过程中我们采用Floyd算法,求图中任意两点间的最短距离,精确性较高。又在相应的约束条件下,利用Lingo进行求解得出总费用最小的供应点的取址。最后通过Matlab作图分析,可以得到供应点以及每个供应点所供应的城市编号的货物运输路线图。这些都是科学的数学模型。
6.2 模型缺点
(1) 两城市间是否只有公路运输,城市间道路是否畅通等均会影响运输费用,供应点的建立,这些假设条件没有考虑全部情况,这里只是在满足假设条件情况下的求得最优解,这是模型不足之处。
(2)在用Floyd算法寻找最短路径的过程中,由于该算法本身的缺陷性,不能完全搜索出所有的最短路径,故模型的结果具有一定的误差,但是考虑到本题中只有49个城市,在我们误差允许的范围内是可以接受的。
七、 模型的改进与推广
在模型中加入运输工具、交通状况等影响因素,会使模型更加可靠,更加实用。供应点的网络建立与破坏问题在实际生活中非常普遍。2008年奥运会比赛主场馆周边地区的临时迷你超市网点设计与优化也是一个带有约束条件的优化问题,这个模型比较接近现实,它很有实用价值,可为超市选址问题,快递公司建立网点地址等提供参考价值。
八、参考文献
【1】谢金星,薛毅,优化建模LINDO/LINGO软件,北京,清华大学出版社,2005
【2】朱德通,最优化模型与实验,同济大学出版社,2004-03-01
【3】施光燕,董加礼编,《最优化方法》,高等教育出版社,1999.9
【4】姜启源,数学模型(第3版),北京:高等教育出版社 ,1999
【5】米尔斯切特著,刘来福译,数学建模方法与分析,机械工业出版社,2009
【6】刘琼荪,龚劬,何中市,傅鹂,任善强,数学实验,北京:高等教育出版社,2004
附录:
问题一:
部分城市间的最短距离(选取649的矩阵)
城市编号
1
2
3
4
5
6
1
0
120
270
480
540
799
2
120
0
370
580
660
919
3
270
370
0
210
740
1069
4
480
580
210
0
530
1279
5
540
660
740
530
0
1339
6
799
919
1069
1279
1339
0
7
1129
1249
1399
1609
1669
330
8
2592
2712
2862
3072
3132
2165
9
1260
1200
1151
1361
1800
2059
10
1094
1034
985
1195
1634
1893
11
1373
1313
1264
1474
1913
2172
12
1204
1144
1090
1080
1610
2003
13
2118
2058
1930
1920
2450
2917
14
1520
1600
1250
1240
1770
2319
15
420
360
311
521
960
1219
16
710
790
440
430
960
1509
17
1250
1330
980
970
1500
2049
18
1630
1710
1360
1350
1880
2429
19
2380
2460
2110
2100
2630
3179
20
2599
2679
2329
2319
2849
3398
21
2960
3040
2690
2680
3210
3759
22
2020
2120
1750
1540
1941
2819
23
2030
2130
1760
1550
1951
2829
24
2510
2610
2240
2030
2431
3309
25
3020
3120
2750
2540
2941
3819
26
4200
4300
3930
3720
4121
4999
27
1110
1210
840
630
1031
1909
28
1740
1840
1470
1260
1220
2539
29
6140
6240
5870
5660
6061
6939
30
1240
1340
970
760
720
2039
31
3720
3820
3450
3240
3200
4519
32
2608
2548
2420
2410
2940
3407
33
2543
2623
2273
2263
2793
3342
34
2510
2590
2240
2230
2760
3309
35
2507
2587
2237
2227
2757
3306
36
2384
2324
2196
2186
2716
3183
37
1526
1466
1417
1627
2066
2325
38
781
721
672
882
1321
1580
39
1186
1306
1456
1666
1726
387
40
844
964
1114
1324
1384
727
41
1148
1268
1418
1628
1688
677
42
1773
1893
2043
2253
2313
1346
43
769
709
660
870
1309
1568
44
995
1075
725
715
1245
1794
45
1461
1541
1191
1181
1711
2260
46
1267
1387
1144
934
727
2066
47
726
846
926
716
186
1525
48
2294
2374
2024
2014
2544
3093
49
3230
3310
2960
2950
3480
4029
Lingo 编程:
model:
sets:
weizhi/1..49/:x,jijian,xuqiu;
assign(weizhi,weizhi):D,l;
endsets
data:
jijian=1123584 100000000000 733400 272080 169480 100000000000 457824 100000000000 100000000000 663936 411616 370120 580032 526680 733248 876763 760608 585504 955776 526680 100000000000 2475320 684608 276640 403660 31008 941184 196384 100000000000 114760 100000000000 100000000000 100000000000 100000000000 100000000000 100000000000 100000000000 100000000000 100000000000 289104 100000000000 100000000000 720480 699200 243808 100000000000 100000000000 100000000000 100000000000;
xuqiu=1232 947 965 358 223 715 753 989 1391 624 677 487 636 495 603 721 834 642 786 693 156 3257 1126 364 531 51 774 323 194 151 234 246 701 55 233 174 568 761 583 317 204 272 948 1150 401 224 217 366 55;
D=(‘C\User\Adminton\desktop.xls’,’shortestpath’)
enddata
min=@sum(weizhi(k):x(k)*jijian(k))+@sum(weizhi(j):@sum(weizhi(i):xuqiu(j)*D(i,j)*l(i,j)))*0.5;
@for(weizhi(i):@bin(x(i)));
@for(assign(i,j):@bin(l(i,j)));
@for(weizhi(j):@sum(weizhi(i):l(i,j))=1);
@for(weizhi(i):@for(weizhi(j):l(i,j)<=x(i)));
end
运行的部分所需结果
Global optimal solution found at iteration: 170
Objective value: 9189288.
Variable Value Reduced Cost
X( 4) 1.000000 272080.0
X( 7) 1.000000 457824.0
X( 11) 1.000000 411616.0
X( 20) 1.000000 526680.0
X( 23) 1.000000 684608.0
X( 26) 1.000000 31008.00
X( 28) 1.000000 196384.0
X( 45) 1.000000 243808.0
L( 4, 1) 1.000000 295680.0
L( 4, 2) 1.000000 274630.0
L( 4, 3) 1.000000 101325.0
L( 4, 4) 1.000000 0.000000
L( 4, 5) 1.000000 59095.00
L( 4, 15) 1.000000 157081.5
L( 4, 16) 1.000000 155015.0
L( 4, 27) 1.000000 243810.0
L( 4, 46) 1.000000 104608.0
L( 4, 47) 1.000000 77686.00
L( 7, 6) 1.000000 117975.0
L( 7, 7) 1.000000 0.000000
L( 7, 8) 1.000000 113735.0
L( 7, 39) 1.000000 209005.5
L( 7, 40) 1.000000 67996.50
L( 7, 41) 1.000000 35394.00
L( 7, 42) 1.000000 138176.0
L( 11, 9) 1.000000 132145.0
L( 11, 10) 1.000000 87048.00
L( 11, 11) 1.000000 0.000000
L( 11, 12) 1.000000 106896.5
L( 11, 13) 1.000000 236910.0
L( 11, 32) 1.000000 151905.0
L( 11, 36) 1.000000 87957.00
L( 1
展开阅读全文