送货.docx
- 文档编号:6682367
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:25
- 大小:124.30KB
送货.docx
《送货.docx》由会员分享,可在线阅读,更多相关《送货.docx(25页珍藏版)》请在冰豆网上搜索。
送货
送货路线设计模型
摘要:
题中要求出一个最短路径,该问题可以转化为图论中的推销员问题,应用哈米尔顿圈来近似找最短路径。
对于问题一尽可能的求出最优的哈米尔顿圈,得到最短路径5S1=52691.8米:
和最短时间T1=3.6954小时。
对问题二,有时间限制以后,采用将不同时间段的点分成了四组,对每一组求出最短路径,最终得到再有时间限制下的最短路径,和最终所用时间3.89小时。
对问题三可转化成多旅行商问题,求解。
对于问题四,求得在最短时间1.4302小时,穷举法求得最少送货员的数目。
一、问题重述
问题1:
要将1~30号货物送到指定地点,在这一题目中,没有时间限制,送货员只要将这30件货物送到目的地,而使所走的路程最短。
问题2:
在这一问中,送货有了时间的限制,每一件物品必须在限制的时间之前送到目的地,并且在交接货物时,会花费时间。
在众多途径中,要选择出送货员走那里条路会按时将货物送到,并且所走的路程最短。
问题3:
不考虑时间的限制,要将100件货物送到并且返回到快递公司,即使在第一问的基础上增加了70个目的地,由于重量和体积的限制,送货员不可能一次性将货物带着,而是要中途返回取货,此时的最短径还要考虑送货员中途从某个目的地返回时的路程。
问题4:
从问题中我们看可以得,没有送货员的限制,要算得最短在多少时间内能将这100件货物送达目的地,在该时间内,最佳送货路线指的是怎样安排送货人员的人数和每一个送货人员所走的路线。
二、模型假设与符号说明
2.1模型假设
1.送货员在交接每件货物时是连续的,如果有M件货物,则交接时间为3*M分钟。
。
2.送货员在到达目的地送货时,将该地的货物全部送到。
2.2符号说明
1.S1为问题一中最短路径的距离。
2.T1为问题一中奖0件货物送达目的地然后回到O点的所用时间。
3.C1为问题一中的送货员所走的路径。
4.S2,S3,S4,S5表示在问题二中各种路径的距离长。
5.t表示问题四中人员足够多时,送完货物的最短时间。
6.T表示问题二中表示的送完货物的最短时间。
三、问题分析
3.1问题
(1)分析
1~30号货物总重量48.48公斤,总体积为0.88立方米,没有超过一次的携带边界值。
问题要求送货员将货物送至目的地后再回到快递公司(位图中的O点),使这一工程经过的路程最短。
将O点看作顶点,而每一个目的地看作一个节点,每一个目的地之间的路径看作对应节点的之间的边,路程的长短作为对应边上的权值。
所以该问题就可以转化成图论中的加权网络图,那么问题就简化为在该加权网络图中寻找从O点出发,所有节点至少走一遍的再回到O点后,使得总权值最小的路径。
用到的图论概念:
概念一:
经过原图中每一个顶点制正好一次的圈,称为该图的哈米尔顿圈,称为H圈。
概念2:
在加权网络图中:
权最小的哈米尔顿圈车能称为最佳H圈;经过每一个顶点至少一次的且权最小的闭合通路称为最佳推销员问题。
问题一中的1~30件物品的总重量为
送货与最佳推销员问题类似,都是要经过这些顶点且要使其所走的路径最短,即要求最佳H圈。
要求总权值最小,我们可以考虑运用单旅程的哈密尔顿回路的方法来求解,哈密尔顿回路是指从一个点出发正好好经过其他节点一次而回到该点,形成的一个圈。
而具有最小权值的哈密尔顿圈就是我们所要求的最短路径。
再与由最小生成树算得下界比较。
3.2问题
(2)的分析
在问题一的基础上,加上了时间限制,我们在图中观察,发现九点之前送到的货物是在O点的左半边,所以问题一的路径就不能再适用了,由于时间的限制,我们只能从要求九点之前送到的点出发,找最短路径。
先按时间段9:
00,9:
30,10:
15,12:
00货物分组,形成四个圈:
18·13·24,31·34·40·45,42·49·43·38,36·27·39·26·21·17·14·16·23·32在这些圈内找到最短路径,最终形成按时间来送到的路线图。
通过观察前三个圈的点基本上在一起且联通路线比较简单,而第四个圈中由于点比较多,且通路有好多种,可以根据问题一中的最短路径来作为参考,选择在这一局部地区的路线。
3.3问题(3)的分析
100件货物的总重量148公斤,总体积为2.8立方米,超出了一次性的携带量。
将30件货物改为100件送至50个点,没有时间的限制,与问题一相似,不同之处就为1~30件货物的总体积和总重量没有超过1立方米和50公斤,而100件货物不同,送货员不能一次性带完100件货物,所以得中途返回O点取货。
我们还可以利用哈米尔顿圈来求解,此时与多旅行商问题方案相一致。
如果送货员返回两次,即使总带货物的重量最多为150公斤,只比货物总重量多2公斤总体积为3立方米只比其货物总重量多0.18立方米,还很难做到两个约束条件同时满足所以返回三次,看做四组旅行商问题。
3.4问题(4)的分析
在人员上没有限制,要求最短时间:
可以每一个地点去一个送货员,这时最短时间是从O点到某点和在该点交接货物所用的时间再回到O点时间总合的最长的时间t。
要是在该时间求得最佳路径,即是派多少个送货员去送货使得在t时间内将货物送至目的地。
四、模型建立与求解
模型一:
我们将原图赋权值,为了求得任意两点之间的路径,运用Floyd算法求解
来存放各边长度,其中:
;
之间没有边,在程序中以各边都不可能达到的充分大的数代替;
是
之间边的长度,
。
对于无向图,
是对称矩阵,
。
Floyd算法的基本思想是:
递推产生一个矩阵序列
,其中
表示从顶点
到顶点
的路径上所经过的顶点序号不大于
的最短路径长度。
计算时用迭代公式:
是迭代次数,
。
最后,当
时,
即是各顶点之间的最短通路值。
模型二:
对问题一来求解
用prim算法求得两点之间的最短路径后,我们在图中找到一个哈米尔顿圈,对该圈进行改进,选用方法为“二边逐次修正法”得到最佳的H圈,(如程序见附录一),得到S1和时间T1,C1。
其遍历节点为:
0,26,21,17,14,16,23,32,38,43,42,49,45,40,34,24,13,18,31,39,27,36,0
对其进行优化,再31-39是最短路径31-27-39;从34-24的最短路径为34-31-24,;从49-45的最短路径为49-42-45;从36-0的最短路径36-21-0
最佳路径:
0-26-21-17-14-16-23-32-35-38-43-42-49-42-45-40-34-31-24-19-13-18-31-27-39-27-36-21-0
所走路程S1=52691.8米
所用时间:
T1=3.6954小时
下界:
41522米
差值:
(52691.8-41522)/52691.8*100%=21.2%
其图形上的线路:
模型三:
问题二的求解
问题一所得到的路径不适用问题二。
我们先向左走,尽量到达9:
00之前的点,走第一个圈内的地点,其中时间包括途中花费时间和该地货物交接时间。
而交接时间与该目的地需要交接的货物数量(见表一),应用程序二,(见附录二)可得:
第一圈:
从O点出发经18,13,19,24用时35.52分钟,没有超过9:
00,
第二圈:
从24到31,34,40,45.用时43.37分钟,未超过9:
30
第三圈:
从45出发到42,49,43,38,由于在45和49直接没有通路,其最短路径是45经过42点到达49。
用时39.5726分钟,未超过10:
15。
第四圈:
路径比较多,我们将几条路径进行比较,:
1.38-35-32-23-16-14-17-21-26-31-27-39-27-36-21-0
所经距离S2=27789.22米,T2=114分钟;;
2.38-36-27-39-27-31-26-21-17-14-16-23-32-23-17-21-0
所经距离S3=30917.68米,T3=2.0小时
3.38-36-27-39-27-31-26-21-17-14-16-23-32-23-17-21-0
与38-36-27-39-27-31-26-21-17-23-32-23-16-14-21-0所经路长度相等,只是有些节点的先后次序发生了改变。
所经距离:
S4=29080.82米,T4=1.96小时
4.38—36-27-39-27-31-26-21-17-14-16-23-32-35-38-36-21-0
所经距离S5=32795.31米,T5=2.116小时
综上的路径最终的路径为
C2:
0-18-13-19-24-31-34-40-45-42-49-42-43-38-35-32-23-16-14-17-21-26-31-27-39-27-36-21-0
总时间T=3.89小时;
图型表示:
模型四:
问题三的求解
将O点复制,使得原图中的点变为54个,类似于问题一中的程序,找一个哈米尔顿圈使得过所有的点和复制的点,利用‘二次逐次逼近法’找到最小H圈,则该H圈被O点和复制点分为了4段,则每一段就是一个回路。
可知现分为四组,每一组的路径也求得。
模型五:
问题四的求解
将从O点去某目的地和交接该地的货物以及返回到O点时所用的时间从大到小排列,先从O点走到最远点再返回,这时需要一个送货员,再从O点走到次远点,交接完货物这时有剩余的时间,可以从他的下一个来排查是否在剩余的时间内能交接完两一个点的货物后再回到O点。
若能则将这几个点让一个送货员来送货,若不能再进行下一个,按照上面的方法进行,穷举法。
对从O点到其余50个点的距离记入一个数组中,对数组进行从大到小排序,用程序得出(见附录三):
可得到停留时间对行驶路线的影响很小,行驶路程的最大作为约束条件,
该表为:
从O点到其余50个点之间最短路径从大到小的排列表:
位置点
5
2
48
33
46
28
4
44
20
30
22
49
O点到该地那点的最短路径
1
6
5
6
3
1
6
2
9
6
1
5
8
0
6
1
5
5
4
9
1
4
3
1
2
1
4
2
2
3
1
4
0
0
4
1
3
9
4
3
1
3
4
1
7
1
3
2
0
5
1
1
9
1
8
1
1
7
2
2
位置点
41
15
6
29
3
1
50
42
47
37
25
43
O点到该地那点的最短路径
1
1
5
7
7
1
1
5
5
8
1
1
3
6
3
1
0
8
2
0
1
0
4
6
7
1
0
0
6
8
9
9
2
8
9
7
5
1
9
2
1
6
8
9
7
5
8
9
3
4
8
8
3
3
位置点
8
7
10
45
9
35
16
19
11
40
12
32
O点到该地那点的最短路径
8
5
0
9
8
1
0
0
8
0
9
2
7
8
6
0
7
7
7
5
7
6
2
4
7
4
9
3
6
9
6
8
6
9
6
5
6
8
8
5
6
7
5
2
6
7
0
7
位置点
38
39
23
13
34
14
24
36
27
17
31
18
O点到该地那点的最短路径
6
2
1
5
5
7
7
7
5
3
9
5
5
2
9
5
5
2
5
4
5
0
9
4
4
7
0
9
4
6
6
7
3
9
9
7
3
6
2
1
2
9
2
9
2
1
8
2
位置点
21
26
O点到该地那点的最短路径
1
7
9
7
1
3
9
2
从变种可以看出
最远的点是5
通过计算最终用时最长的点也为5点,
从O点出发到5再回到O点,用时t=1.4302小时
利用穷举法得到再改最短时间内最少需要28个送货员来送货并回到O点。
路径分别为:
0-5-0
0-2-0
0-48-0
0-33-0
0-46-18-0
0-28-26-0
0-4-0
0-44-0
0-20-31-0
0-30-0
0-22-27-0
0-49-24-0
0-41-36-0
0-15-17-0
0-6-14-0
0-29-23-0
0-3-39-0
0-1-38-0
0-50-13-0
0-42-12-0
0-47-19-0
0-37-16-0
0-25-35-0
0-43-11-0
0-8-9-0
0-7-10-0
0-45-34-0
0-40-21-32-0
五、模型评价
5.1模型一优缺点
用到了哈密顿环,和二分逼近法结合最短路径求得最优路线,并且求了下界来进行参考比较,使所得的模型具有一定的可参考性。
但是由于求解哈密顿环初始所选的路径具有随机型,所以,模型本身就是一个近似算法,具有不可避免的误差。
5.2模型二优缺点
在考虑路径时首先考虑到了时间的约束,最终得出的结果不仅在约定的时间将货物送达,并且提前了十几分钟完成了所有任务。
大量节省了时间。
但是由于我们将送达时间作为最为重要的约束条件,所走的路径并不是最优的,我们将继续研究和对比。
5.3模型四的优缺点,理论上非常有道理,它是根据最远点像最近点逼近,会节省很多时间和减少送货员的数量。
但是在实际计算和操作中,很难进行编程计算,我们只适用之进行了估算,并没有得到最准确的结果。
附录:
附录一:
clear;
a=[11000,8250;9185,500;1445,560;7270,570;3735,670;2620,995;10080,1435;10025,2280;7160,2525;13845,2680;11935,3050;7850,3545;6585,4185;7630,5200;13405,5325;2125,5975;15365,7045;14165,7385;8825,8075;5855,8165;780,8355;12770,8560;2200,8835;14765,9055;7790,9330;4435,9525;10860,9635;10385,10500;565,9765;2580,9865;1565,9955;9395,10100;14835,10365;1250,10900;7280,11065;15305,11375;12390,11415;6410,11510;13915,11610;9510,12050;8345,12300;4930,13650;13265,14145;14180,14215;3030,15060;10915,14235;2330,14500;7735,14550;885,14880;11575,15160;8010,15325];
fori=1:
51
forj=1:
51
t=a(i,:
)-a(j,:
);
c(i,j)=sqrt(t
(1)^2+t
(2)^2);
end
end
c(1,19)
b(2,4)=1;
b(2,9)=1;
b(3,21)=1;
b(3,5)=1;
b(4,9)=1;
b(4,5)=1;
b(5,3)=1;
b(6,16)=1;
b(6,3)=1;
b(7,2)=1;
b(8,19)=1;
b(8,2)=1;
b(9,13)=1;
b(10,15)=1;
b(10,11)=1;
b(11,19)=1;
b(11,8)=1;
b(12,13)=1;
b(13,14)=1;
b(13,26)=1;
b(13,16)=1;
b(14,19)=1;
b(14,20)=1;
b(14,12)=1;
b(15,19)=1;
b(15,17)=1;
b(15,18)=1;
b(15,22)=1;
b(16,23)=1;
b(16,26)=1;
b(17,24)=1;
b(18,24)=1;
b(19,32)=1;
b(20,25)=1;
b(21,23)=1;
b(22,27)=1;
b(22,37)=1;
b(22,18)=1;
b(23,31)=1;
b(24,18)=1;
b(25,32)=1;
b(26,42)=1;
b(26,20)=1;
b(26,30)=1;
b(28,32)=1;
b(29,34)=1;
b(30,23)=1;
b(31,29)=1;
b(31,42)=1;
b(32,27)=1;
b(32,35)=1;
b(33,36)=1;
b(33,24)=1;
b(34,47)=1;
b(34,29)=1;
b(35,41)=1;
b(36,39)=1;
b(37,46)=1;
b(37,28)=1;
b(38,41)=1;
b(39,37)=1;
b(40,28)=1;
b(41,35)=1;
b(41,46)=1;
b(42,45)=1;
b(42,38)=1;
b(42,47)=1;
b(43,44)=1;
b(43,50)=1;
b(44,39)=1;
b(45,49)=1;
b(45,51)=1;
b(46,51)=1;
b(46,43)=1;
b(47,49)=1;
b(48,41)=1;
b(49,45)=1;
b(50,51)=1;
b(50,43)=1;
b(51,41)=1;
b(1,19)=1;
b(1,22)=1;
b(1,27)=1;
b
fori=1:
51
forj=1:
51
ifb(i,j)==1
b(j,i)=1;
end
end
end
d=c.*b;
fori=1:
51
forj=1:
51
ifd(i,j)==0
d(i,j)=Inf;
ifi==j
d(i,j)=0;
end
end
end
end
a=d;
n=size(a,1);
D=a;
path=zeros(n,n);
fori=1:
n
forj=1:
n
ifD(i,j)~=Inf
path(i,j)=j;
end
end
end
fork=1:
n
fori=1:
n
forj=1:
n
ifD(i,k)+D(k,j) D(i,j)=D(i,k)+D(k,j); path(i,j)=path(i,k); end end end end path 附录二: c1=[0181324344045494243383223161417212631392736]; c1=c1+1; L=length(c1); flag=1; whileflag>0 flag=0; form=1: L-11 forn=m+10: L-1 ifD(c1(m),c1(n))+D(c1(m+1),c1(n+1)) flag=1; c1(m+1: n)=c1(n: -1: m+1); end end end end sum1=0; fori=1: L-1 sum1=sum1+D(c1(i),c1(i+1)); end circle=c1-1; sum=sum1; t=sum/1000/24+30*3/60; disp('问题一: ') disp('路径: ') circle disp('路程: ') sum disp('时间: ') t A=[0131416171821232426273132343638394042434549]; A=A+1; fori=1: 22 forj=1: 22 B(i,j)=D(A(i),A(j)); end end B1=B(2: 22,2: 22); a=B1; a(find(a==0))=inf; result=[];p=1;tb=2: length(a); whilelength(result)~=length(a)-1 temp=a(p,tb);temp=temp(: ); d=min(temp); [jb,kb]=find(a(p,tb)==d); j=p(jb (1));k=tb(kb (1)); result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[]; end wt=0; fori=1: 20 wt=wt+result(3,i); end wt=wt+1392.06+1796.94; disp('下界: ') wt (问题1) a1=[inf,5295.49,2182.03,4709.24;5295.49,inf,3113.46,5714.34;2182.03,3113.46,inf,3883.84;4709.24,5714.34,3883.84,inf]; p=1; sum=0; T=0; t=0; x=1; a1(: p)=inf; fori=1: 3 [s,t]=min(a1(p,: )); sum=sum+s; T=s/24/1000+T; a1(: t)=inf; p=t; T=T+3/60; x=[x;t]; end disp('问题2: '); disp('第一步骤: '); disp('路程: '); disp(sum); disp('顺序: '); disp(x'); disp('时间: '); disp(T); a1=[inf1780.154104.95735.688234.28;1780.15inf2324.753955.536454.13;4104.92324.75inf1630.784847.79;5735.683955.531630.78inf3217.01;8234.286454.134847.293217.01inf]; p=1; T=0.6087; t=0; x=1; a1(: p)=inf; fori=1: 4 [s,t]=min(a1(p,: )); sum=sum+s; T=s/24/1000+T; a1(: t)=inf; p=t; T=T+3/60; if(i==1) T=T+3/60; end if(i==4) T=T+3/60*2; end x=[x;t]; end disp('第二步骤: '); disp('路程: '); disp(sum); disp('顺序: '); disp(x'); disp('时间: '); disp(T); a1=[inf4719.882351.723269.394323.1;4719.88inf3536.112618.445
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 送货
![提示](https://static.bdocx.com/images/bang_tan.gif)