1、数学建模运输问题 集团标准化工作小组 Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN数学建模运输问题运输问题摘要本文主要研究的是货物运输的最短路径问题,利用图论中的Floyd算法、Kruskal算法,以及整数规划的方法建立相关问题的模型,通过matlab,lingo编程求解出最终结果。关于问题一,是一个两客户间最短路程的问题,因此本文利用Floyd算法对其进行分析。考虑到计算的方便性,首先,我们将两客户之间的距离输入到网络权矩阵中;然后,逐步分析出两客户间的最短距离;最后,利用Matlab软件对其进行编程求解,运行得到结果:2-3-8-9-10总路程为85公里。关于问题二,运输公司
2、分别要对10个客户供货,必须访问每个客户,实际上是一个旅行商问题。首先,不考虑送货员返回提货点的情形,本文利用最小生成树问题中的Kruskal算法,结合题中所给的邻接矩阵,很快可以得到回路的最短路线:-9-10-2;然后利用问题一的Floyd算法编程,能求得从客户2到客户1(提货点)的最短路线是:2-1,路程为50公里。即最短路线为:-9-10-2-1。但考虑到最小生成树法局限于顶点数较少的情形,不宜进一步推广,因此本文建立以路程最短为目标函数的整数规划模型;最后,利用LINGO软件对其进行编程求解,求解出的回路与Kruskal算法求出的回路一致。关于问题三,是在每个客户所需固定货物量的情况下
3、,使得行程之和最短。这样只要找出两条尽可能短的回路,并保证每条线路客户总需求量在50个单位以内即可。因此我们在问题二模型的基础上进行改进,以货车容量为限定条件,建立相应的规划模型并设计一个简单的寻路算法,对于模型求解出来的结果,本文利用Kruskal算法结合题中所给的邻接矩阵进行优化。得到优化结果为:第一辆车:-1,第二辆车:,总路程为280公里。关于问题四,在问题一的基础上我们首先用Matlab软件编程确定提货点到每个客户点间的最短路线,然后结合一些限定条件建立一个目标模型,设计一个较好的解决方案进行求解可得到一种很理想的运输方案。根据matlab运行结果分析得出4条最优路线分别为:1-5-
4、2,1-4-3-8,1-7-6,1-9-10。最短总路线为245公里,最小总费用为645。关键词: Floyd算法 Kruskal算法 整数规划 旅行商问题 一、问题重述某运输公司为10个客户配送货物,假定提货点就在客户1所在的位置,从第i个客户到第j个客户的路线距离(单位公里)用下面矩阵中的位置上的数表示(其中表示两个客户之间无直接的路线到达)。1、运送员在给第二个客户卸货完成的时候,临时接到新的调度通知,让他先给客户10送货,已知送给客户10的货已在运送员的车上,请帮运送员设计一个到客户10的尽可能短的行使路线(假定上述矩阵中给出了所有可能的路线选择)。2、现运输公司派了一辆大的货车为这1
5、0个客户配送货物,假定这辆货车一次能装满10个客户所需要的全部货物,请问货车从提货点出发给10个客户配送完货物后再回到提货点所行使的尽可能短的行使路线对所设计的算法进行分析。3、现因资源紧张,运输公司没有大货车可以使用,改用两辆小的货车配送货物。每辆小货车的容量为50个单位,每个客户所需要的货物量分别为8,13,6,9,7,15,10,5,12,9个单位,请问两辆小货车应该分别给那几个客户配送货物以及行使怎样的路线使它们从提货点出发最后回到提货点所行使的距离之和尽可能短对所设计的算法进行分析。4、如果改用更小容量的车,每车容量为25个单位,但用车数量不限,每个客户所需要的货物量同第3问,并假设
6、每出一辆车的出车费为100元,运货的价格为1元/公里(不考虑空车返回的费用),请问如何安排车辆才能使得运输公司运货的总费用最省二、问题分析关于问题一,是一个两客户间最短路程的问题,因此本文利用Floyd算法对其进行分析。考虑到计算的方便性,首先,我们将两客户之间的距离输入到网络权矩阵中;然后,逐步分析出两客户间的最短距离;最后,利用Matlab软件对其进行编程求解。关于问题二,运输公司分别要对10个客户供货,必须访问每个客户,实际上是寻找一条最短的行车路线。首先,不考虑送货员返回提货点的情形,本文利用最小生成树问题中的Kruskal算法,结合题中所给的邻接矩阵,很快可以得到回路的最短路线:;然
7、后利用问题一的Floyd算法和程序,能求得从客户2到客户1(提货点)的最短路线是:,路程为50公里。但考虑到最小生成树法局限于顶点数较少的情形,不宜进一步推广,因此本文又根据路程最短建立以路程最短为目标函数的整数规划模型;最后,利用LINGO软件对其进行编程求解。关于问题三,是在每个客户所需固定货物量的情况下,使得行程之和最短。这样只要找出两条尽可能短的回路,并保证每条线路客户总需求量在50个单位以内即可。因此我们在问题二模型的基础上进行改进,以货车容量为限定条件,建立相应的规划模型并设计一个简单的寻路算法,对于模型求解出来的结果,本文利用Kruskal算法结合题中所给的邻接矩阵进行优化。关于
8、问题四,我们首先用Matlab软件编程确定提货点到每个客户点间的最短路线,然后结合一些限定条件建立一个目标模型,设计一个较好的解决方案进行求解可得到一种很理想的运输方案。三、模型假设1.假设客户级别平等;2.假设不考虑装卸车费用;3.假设货车不发生意外事故;4.假设运输过程中货物无损失;四、符号说明不同的客户;从客户到客户的距离;总路程;五、模型的建立与求解问题一模型的建立与求解问题一是要找出从客户2到客户10的最短路径,本文利用Floyd算法对此文进行求解。为计算方便,令网络的权矩阵为的距离。Floyd算法基本步骤为:(1)输入权矩阵。(2)计算 其中 (3)中元素就是到的最短路长。在本文计
9、算中,对Floyd算法进行编程(程序见附录1),利用Matlab软件进行求解。运行结果如下:a = 0 40 55 40 25 55 30 55 50 70 50 0 30 45 35 50 45 55 65 85 55 30 0 15 55 30 50 25 35 55 40 45 15 0 45 30 50 20 30 50 25 15 45 45 0 35 10 30 40 55 55 50 30 30 35 0 25 50 35 55 30 25 50 50 10 25 0 30 40 60 30 45 25 20 30 25 30 0 10 30 20 40 30 40 35 15
10、25 45 0 20 35 20 10 25 20 40 30 35 30 0path = 1 5 4 4 5 7 7 5 9 9 1 2 3 3 5 6 5 3 3 3 4 2 3 4 8 6 7 8 8 8 1 3 3 4 5 6 8 8 8 8 1 2 2 4 5 7 7 8 8 10 7 2 3 4 7 6 7 4 9 9 1 5 3 8 5 6 7 8 8 10 9 5 3 4 5 9 7 8 9 9 1 10 10 4 7 6 7 8 9 10 1 2 3 3 5 3 5 3 9 10请输入起点2请输入终点10 2 3 8 9 10由运行结果可以得出运货员从客户2到客户10的最短路
11、径是:总路程为85公里。问题二模型的建立与求解运输公司为这10个客户配送货物问题实际上是寻找一条最短的行车路线。当不考虑送货员返回提货点的时候,本文利用最小生成树问题中的Kruskal算法结合题中所给的邻接矩阵,很快可以得到无回路的最短路线。Kruskal算法基本步骤:每步从未选的边中选取边,使它与已选边不够成圈,且是未选边中的最小权边,知道选够条边为止。利用最小生成树问题中的Kruskal算法结合题中所给的邻接矩阵,很快可以得到以下最小生成树:这两棵生成树不同之处就在于从客户6到达客户8的路径不一样,而实际路程经过计算后是一样的,路线的总行程为175公里。利用问题一的Floyd算法和程序,能
12、求得从客户2到客户1(提货点)的最短路线是,路程为50公里。这样该回路,即最短的行车路线为:行车路线总行程为225公里。以最小生成树法解决此问题速度快,结果较精确,但是只适合数目较少时,不适宜推广,因此本文又根据路程最短建立整数规划模型。为了更好的防止子巡回的产生,根据哈米尔顿回路,须附加一个约束条件:当访问客户i后必须要有一个即将访问的确切客户;访问客户j前必须要有一个刚刚访问过的确切客户。依次设立约束条件。利用Lingo求解模型部分结果(附录2):Global optimal solution found. Objective value: Objective bound: Infeasi
13、bilities: Extended solver steps: 0 Total solver iterations: 86 Variable Value Reduced Cost X( 1, 5) X( 2, 1) X( 3, 4) X( 4, 8) X( 5, 7) X( 6, 3) X( 7, 6) X( 8, 9) X( 9, 10) X( 10, 2) 由此可得,行程路线最短的回路:总路程为225公里。问题三模型的建立与求解用两辆容量为50单位的小货车运货,在每个客户所需固定货物量的情况下,要使得行程之和最短。这样只要找出两条尽可能短的回路,并保证每条线路客户总需求量在50个单位以内
14、。此问与问题二有相似之处都要考虑回到提货点的情形,因此本文在模型2的基础上进行改进, 重新建立相应的整数线性规划模型。目标函数:利用Lingo求解模型部分结果(附录3):Global optimal solution found. Objective value: Objective bound: Infeasibilities: Extended solver steps: 0 Total solver iterations: 224 Variable Value Reduced Cost X( 1, 5) X( 2, 3) X( 3, 6) X( 5, 2) X( 6, 7) X( 7,
15、1) Global optimal solution found. Objective value: Objective bound: Infeasibilities: Extended solver steps: 0 Total solver iterations: 224 Variable Value Reduced Cost X( 1, 4) X( 4, 8) X( 5, 1) X( 8, 9) X( 9, 10) X( 10, 5) 由此可得,两辆车的行车路线及路程:第一辆车:,包含的客户有2,3,6,7,运货总量为44,路程为155公里。第二辆车:,包含的客户有4,8,9,10,5运
16、货总量为42单位,路程为135公里。总路程为290公里。对于模型求解出来的结果,本文利用Kruskal算法结合题中所给的邻接矩阵进行优化。从起始点处,进行分析,用两辆小的货车配送货物,为了尽可能的减少两辆车的重复路线, 到、的路程最短,让两辆车分开运货,先根据货物承载量50的限制让其中的一辆车走完路程,再让另一辆车走剩余城市的最短路线,这样走出两条运货路线:第一种情况:第一辆车:,包含的客户有5,2,3,4,8,从模型1可解得,从回到的最短路线是,运货总量为40单位,路程为145公里。第二辆车:,包含的客户有7,6,9,10,运货总量为46,路程为135公里。这种情况下总路程为280公里。第二
17、种情况:第一辆车:,包含的客户有7,6,3,4,8,从模型1可解得,从回到的最短路线是,运货总量为45单位,路程为150公里。第二辆车:,包含的客户5,2,9,10,运货总量为41单位,路程为160。这种情况下总路程为310公里。 对这两种情况对比,分析,可以看出第一种情况优于第二种情况。因此选择第一种情况的路线。问题四模型的建立与求解题目要求我们运费最省,所以要考虑到需要的车最少,以及每辆车行驶的路程最短,而且还要保证送到每个客户手中。根据客户总需求量和货车的容量,所以,公司可派4辆货车去送货。在此,我们假设:从提货点1到各客户点最短路为从提货点1到各客户点的最短路程提货点1到各客户点路径客
18、户所需要货物量的总和运用matlab程序(见附录4)可得:从中可以发现:,所以我们要继续对其进行分析:首先为了保证送到每个客户手里,所以必须走,那样就可以删除;然后考虑到货车的路程最短,所以要走,删除;最后,就只能走1-4-3-8路线。图1 四辆货车路线图经过计算可得下表:表1:4辆车的情况表每辆车的路线每辆车的路程每辆车所载的货物量1-5-240201-4-3-880201-7-655251-9-107021 所以,可得到目标函数:六、模型的评价与推广模型的评价 (1)在整个模型的建立过程中,本文考虑的比较全面客观,使模型具有较强的说服力,结果更合理。 (2)根据问题的特点,综合运用了多个软
19、件,如lingo、matlab等等,使得在解决问题的过程中,更方便简单。 这种寻路方法有其局限性,只适用于一些顶点较少的情况,顶点多,寻找起来较为麻烦。模型的推广 模型的建立比较客观,在现实中也可以广泛的应用,与现实情况紧密相连;比如:最优路径问题与哈密顿回路问题,这些在现实中应用范围已经很广了。七、参考文献1 胡运权,运筹学教程第四版,北京:清华大学出版社,2012。2 朱道元,数学建模案例精选,北京:科学出版社,2005。3 姜启源,谢金星。叶俊数学模型北京:高等教育出版杜,2004。I4 吴祈宗运筹学与最优化方法fM北京:机械工业出版社,2003。附录附录1: clear;clc;M=1
20、0000;%不能直接到达是将距离赋值给Ma(1,:)=0,50,M,40,25,M,30,M,50,M;a(2,:)=50,0,30,M,35,50,M,60,M,M;a(3,:)=M,30,0,15,M,30,50,25,M,60;a(4,:)=40,M,15,0,45,30,55,20,40,65;a(5,:)=25,15,M,45,0,60,10,30,M,55;a(6,:)=M,50,30,30,60,0,25,55,35,M;a(7,:)=30,M,50,M,10,25,0,30,45,60;a(8,:)=M,60,25,20,30,55,30,0,10,M;a(9,:)=20,M,
21、M,40,M,15,25,45,0,20;a(10,:)=35,20,10,45,20,M,60,M,30,0;%建立a矩阵path=zeros(length(a); %建立一个与矩阵a同大小的全零矩阵for i=1:10 for j=1:10 path(i,j)=j; %用path矩阵记录走过的点end end for k=1:10 for i=1:10 for j=1:10 if a(i,j)a(i,k)+a(k,j) a(i,j)=a(i,k)+a(k,j); path(i,j)=path(i,k); % floyd算法 end end endenda, pathi1=input(请输入
22、起点);i2=input(请输入终点); disp(i1); while i1=i2 i1=path(i1,i2);disp(i1); end;附录2:MODEL: SETS: CUSTOMERS / 1. 10/: U; LINK( CUSTOMERS, CUSTOMERS): DIST,X; ENDSETS DATA: DIST = 0 50 100000 40 25 100000 30 100000 50 100000 50 0 30 100000 35 50 100000 60 10000 100000 100000 30 0 15 100000 30 50 25 100000 60
23、40 10000 15 0 45 30 55 20 40 65 25 15 100000 45 0 60 10 30 100000 55 100000 50 30 30 60 0 25 55 35 1000000 30 100000 50 100000 10 25 0 30 45 60 100000 60 25 20 30 55 30 0 10 100000 20 100000 100000 40 100000 15 25 45 0 20 35 20 10 45 20 100000 60 100000 30 0;ENDDATA N = SIZE( CUSTOMERS); MIN = SUM(
24、LINK: DIST * X); FOR( CUSTOMERS( K): SUM( CUSTOMERS( I)| I #NE# K: X( I, K) = 1; SUM( CUSTOMERS( J)| J #NE# K: X( K, J) = 1; FOR( CUSTOMERS( J)| J #GT# 1 #AND# J #NE# K: U( J) = U( K) + X ( K, J) - ( N - 2) * ( 1 - X( K, J) + ( N - 3) * X( J, K) ); ); FOR( LINK: BIN( X); FOR( CUSTOMERS( K)| K #GT# 1
25、: U( K) = 1 + ( N - 2) * X( K, 1) );END Global optimal solution found. Objective value: Objective bound: Infeasibilities: Extended solver steps: 0 Total solver iterations: 86 Variable Value Reduced Cost N U( 1) U( 2) U( 3) U( 4) U( 5) U( 6) U( 7) U( 8) U( 9) U( 10) DIST( 1, 1) DIST( 1, 2) DIST( 1, 3
26、) DIST( 1, 4) DIST( 1, 5) DIST( 1, 6) DIST( 1, 7) DIST( 1, 8) DIST( 1, 9) DIST( 1, 10) DIST( 2, 1) DIST( 2, 2) DIST( 2, 3) DIST( 2, 4) DIST( 2, 5) DIST( 2, 6) DIST( 2, 7) DIST( 2, 8) DIST( 2, 9) DIST( 2, 10) DIST( 3, 1) DIST( 3, 2) DIST( 3, 3) DIST( 3, 4) DIST( 3, 5) DIST( 3, 6) DIST( 3, 7) DIST( 3,
27、 8) DIST( 3, 9) DIST( 3, 10) DIST( 4, 1) DIST( 4, 2) DIST( 4, 3) DIST( 4, 4) DIST( 4, 5) DIST( 4, 6) DIST( 4, 7) DIST( 4, 8) DIST( 4, 9) DIST( 4, 10) DIST( 5, 1) DIST( 5, 2) DIST( 5, 3) DIST( 5, 4) DIST( 5, 5) DIST( 5, 6) DIST( 5, 7) DIST( 5, 8) DIST( 5, 9) DIST( 5, 10) DIST( 6, 1) DIST( 6, 2) DIST(
28、 6, 3) DIST( 6, 4) DIST( 6, 5) DIST( 6, 6) DIST( 6, 7) DIST( 6, 8) DIST( 6, 9) DIST( 6, 10) 1000000. DIST( 7, 1) DIST( 7, 2) DIST( 7, 3) DIST( 7, 4) DIST( 7, 5) DIST( 7, 6) DIST( 7, 7) DIST( 7, 8) DIST( 7, 9) DIST( 7, 10) DIST( 8, 1) DIST( 8, 2) DIST( 8, 3) DIST( 8, 4) DIST( 8, 5) DIST( 8, 6) DIST(
29、8, 7) DIST( 8, 8) DIST( 8, 9) DIST( 8, 10) DIST( 9, 1) DIST( 9, 2) DIST( 9, 3) DIST( 9, 4) DIST( 9, 5) DIST( 9, 6) DIST( 9, 7) DIST( 9, 8) DIST( 9, 9) DIST( 9, 10) DIST( 10, 1) DIST( 10, 2) DIST( 10, 3) DIST( 10, 4) DIST( 10, 5) DIST( 10, 6) DIST( 10, 7) DIST( 10, 8) DIST( 10, 9) DIST( 10, 10) X( 1, 1) X( 1, 2) X( 1, 3) X( 1, 4) X( 1, 5) X( 1, 6) X( 1, 7) X( 1, 8) X( 1, 9) X( 1, 10) X( 2, 1) X( 2, 2) X( 2, 3) X( 2, 4) X( 2, 5) X( 2, 6) X( 2, 7) X(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1