邮递员送递图论模型快222

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

邮递员送递图论模型1.摘要
2. 问题重述
邮递员需要以最快的速度及时将邮件送达指定地点,而且他们往往一人送多个地方,请设计方案使其耗时最少。

现有一邮局在图1中的O 点,一邮递员需将邮件送至城市内多处,请设计送货方案,使所用时间最少。

该地形图的示意图见图1,各点连通信息见表3。

各件货物的相关信息见表1,50个位置点的坐标见表2。

邮递员要将100件邮件送到50个地点。

假设邮递员的最大载重是50公斤,所带货物的最大体积为1立方米,邮递员的路上平均速度为30公里/小时,每件货物交接花费2.5分钟。

问题如下
问题一: 若将1~30号邮件送到指定地点并返回。

设计最快完成路线与方式。

给出结果。

要求标出送货线路。

问题二:假定该邮递员从早上8点上班开始送邮件,要将1~30号邮件的送达时间不能超过指定时间,请设计最快完成路线与方式。

要求标出送货线路。

问题三: 若不需要考虑所有邮件送达时间限制(包括前30件货物),现在要将100件邮件全部送到指定地点并返回。

设计最快完成路线与方式。

要求标出送货线路,给出送完所有邮件的时间。

由于受重量和体积限制,邮递员可中途返回取货。

可不考虑中午休息时间。

问题四:如果邮递员送邮件的同时,还负责将各地需要寄送的邮件带回邮局,各地点需要带回邮局寄送的邮件的信息如表3,按照此条件重新解答以上问题。

3. 问题分析
对于送货员从起始点出发将货物送到各地点问题,可以转换为图论中的最短路径求解问题,将地形图中的各个送递点看做一个顶点,各条通路看做相应顶点的间的边,各条公路的长度看做对应边上的权,由题目表3所给的各地点之间的连通性构建无向图,所给的送递路线图就转化为加权网络图
(,)G V E 。

对于问题一,邮递员要送递30个邮件,访问21个位置点并返回起始点,要设计一条最快完成的路线。

在加权图(,)G V E 中,权最小的哈密顿圈为最佳哈密顿圈,而经过每个点至少一次的权最小的闭通路称为最佳推销员回路。

有定理知道,在加权图(,)G V E 中,若对任意,,x y z V ∈,
,,z x z y ≠≠都有
(,)(,)(,)w x y w x z w z y ≤+,则完备加权 图'G 的最佳H 圈也是最佳推销
员回路即邮递员最快完成的路线。

【1】于是此问就是要求出最佳哈密顿圈。

在加权图G 中求最佳邮递回路问题是NP -完全问题,我们可以用二边逐次修正法得出的近似解来替代最优解。

对于问题二,邮递员要在规定时间内将邮件送达,根据第一步得出的路
线,计算各个点到达时间,对不满足的点进行调整从而得到最优路线。

对于问题三,送递过程受到物件的质量和体积的限制,由于100个物件的总质量是148公斤,总体积为2.8立方米。

又邮递员的最大载重为50公斤,最大体积为1立方米。

由于我们估计要分三次运送物件,即要求出三个最佳H 圈。

根据起始点到其余顶点的最短路,这些路构成一棵以起始点为树根的树,再对它进行划分(满足一定的原则)成三部分使得满足质量和体积的约束条件。

最后得到三个最佳H 圈即三次送递路线。

对于问题四,部分位置点有送出物件也有带回物件,先得到各点的物件质量差12i i i m m ∆=-,再利用i S M =∆÷得到各个点带回邮件占限制值的百分数,体积同理得到,作出一张图。

再根据时间要求,尽量将有时间要求的点
分在一组,再利用图限制一个组内的S 相加不得超过V M (),最终得到满足
各准则并且误差在可接受范围内的路线安排。

4.模型假设和符号说明 4.1模型假设
1. 邮递员的车在路上的速度总是一定的,不会出现抛锚等突发现象。

2. 邮递员到达各个地点的交货时间一定,交货完成后立即启程,不会出现特殊
情况而延误时间。

4.2符号说明
5.模型的建立与求解 5.1关于问题一 5.1.1问题一模型
此问题要求解邮递员的最佳递送路线,是一个求解最佳哈密顿圈的问题。

将地形图中的各个送递点看做一个顶点,各条通路看做相应顶点的间的边,各条公路的长度看做对应边上的权,所给的送递路线图就转化为加权网络图(,)G V E 。

即在(,)G V E 中寻找从起始点51出发,行遍所有顶点(即前30号邮件所在的位置点)
至少一次再回到起始点。

目标:最佳哈密顿圈(权最小的送递路线)
条件:前30号邮件所在位置点至少经过一次
5.1.2问题一求解
在加权图G中求最佳哈密顿圈问题是NP—完全问题,我们采用一种近似解
法求出该问题的一个近似最优解,来代替最优解,解法如下。

算法:【2】
1.. 先由表3各个点的相互到达信息得出邻接矩阵A,再利用表2中50个位置点的坐标求出任意两点间的距离矩阵C,于是得到图G的带权邻接矩阵'
D A C
=⋅。

2.用Matlab中的flord算法求出G中任意两个顶点间的最短路,构造出完备

'''
(,)
G V E,'
(,),(,)(,)
G
x y E w x y Mind x y
∀∈=
3.随机搜索出'G中100000个圈
4.在第3步求出的H圈中,用二边逐次修正法【3】进行优化,得到近似最佳
H圈。

5.重复运行多次,比较第四步得出的最佳H圈,选取权最小的一个圈。

5.1.3问题一结果
利用Matlab编程求解上述问题,程序代码和详细过程见附录。

送递路线: 51—18—13—(18)—24—31—27—39—27—31—31—34—40—45—45—45—42—49—42—43—43—38—36—38—32—32—32—23—23—16—14—17—21—26—26—51
送递总路程长54.697公里,耗时3.0732小时。

5.2关于问题二
5.2.1问题二模型
此问题要求解邮递员在规定时间内的最佳送递路线。

目标:最佳哈密顿圈(权最小的送递路线)
条件:
1.前30号邮件所在位置点至少经过一次
2. 送达时间小于规定的最迟时间
对任意的i,
1
1
i
i
i
s i
s
t T
=


(i S路线中按先后顺序排列的每个位置点与之对
应)
5.2.2问题二求解
1.首先检查问题一求解出来的最佳H圈的路线中各个点所对应的花费时间,若所有点都符合条件二,则为题目所求的解;若有分点不满足,则转第2步。

2.对于不满足条件二的点,进行调整,增加路线更改送货顺序使得达到最优。

5.2.3问题二结果
位置点51 18 13 24 27 39 27 到达所需时间0 0.1114 0.2568 0.489 0.6256 0.7266 0.8276
31 31 34 40 45 45 45 49 42
0.9048 0.9465 1.0657 1.1617 1.3106 1.3523 1.3939 1.5797 1.6871
43 43 36 38 32 32 32 23 23 1.7593 1.801 1.9812 2.0741 2.1999 2.2416 2.2832 2.3686 2.4103
16 14 17 21 26 26 51
2.5219 2.6505 2.7653 2.8678 2.9825
3.0242 3.1149
将上述路线分为4段,以最大的时间并小于1小时,1.5小时,2.25小时为边界点,即表格中红色的点。

送完所有物件需要3.1149小时,所以要求物件送达时间为12:00的物件(即不超过4个小时送达)满足要求。

对于要求在9:00(1小时)送达的物件对应点13,18,24都在点31之前,所以能在规定时间内送达。

对于要求在9:30(1.5小时)送达的物件对应点31,45,34,40都在点45之前,能够在规定时间内送达。

对于要求在10:15(2.25小时)送达的物件对应点38,43,42,49都在点32之前,能够在规定时间内送达。

综上,所有物件都能在规定时间内送达,路线和各个点送达所花的时间如表格中所示。

5.3关于问题三
5.3.1问题三模型
此问题要求邮递员将100个物件送出,并受到物件重量和体积的限制,求权最小的送递路线。

由于100个物件的总质量是148公斤,总体积为2.8立方米。

又邮递员的最大载重为50公斤,最大体积为1立方米。

由于我们估计要分三次运送
物件,即要求出三个最佳H圈。

根据起始点到其余顶点的最短路,这些路构成一
棵以起始点为树根的树如下图2所示,从图中可以得到以起始点51出发到其他点共6条干支。

再对它进行划分(满足一定的原则)成三部分使得满足质量和体
积的约束条件。

最后得到三个最佳H圈即三次送递路线。

则此问题包含两方面:第一对顶点进行分组,第二在每组中求最佳H圈。

目标:求解三个最佳哈密顿圈
条件:各个顶点至少经过一次
每个哈密顿圈中的物件总质量和体积小于规定质量和体积
图2
5.3.2问题三求解
根据经验及上述分析,在分组时应遵从以下准则:
1)尽量使同一干支上及其分支上的点分在同一组
2)应将相邻的干支上的点分在同一组
3)尽量将长的干支和短的干支分在同一组
由上述分组准则,我们粗略找到两种分组形式如下:
分组一(①②)(③④)(⑤⑥)
分组二(①⑥)(②③)(④⑤)
由于⑤和⑥中的点都过于密集,不适宜分在一个小组,故考虑分组二。

对分组二进行计算其中的物件质量和体积,调整部分点。

由于(②③)(④⑤)都超过标准,所以将一些点调整到(①⑥)。

将(②③)中的公共点21和离(①⑥)最近的点32调过去。

由于(④⑤)超过标注比较多,故分叉支上又离(①⑥)较近的点47,50,39,27调整到(①⑥)中。

这样调整之后:
路线Ⅰ 51-26-24-19-25-29-22-20-30-28-33-46-48-44-41-37-40-34
质量:49.75公斤,体积:0.9474立方米
路线Ⅱ 51-17-23-16-14-9-10-7-6-1-8-3-4-2--5-15-12-11 质量:49.6公斤,体积:0.9611立方米
路线Ⅲ51-39-27-36-45-47-50-49-42-43-38-35-32-21-51 质量:48.65公斤,体积:0.8915立方米
于是每个分组中的物件就符合质量和体积的标准。

于是对分组中的每组顶点的生成子图,用问题一中的算法求出近似最优解及相应的送递路线。

5.3.3问题三结果及分析
近似结果如下表:
结果分析:
我们再假设每个点都连通,利用遗传算法得到最后的结果为总路线长为125.4公里,而我们计算的结果为133.855公里。

那么相对误差为(133.855-125.4)/133.855=6.32%,由于各个点之间实际不是都连通的,所以我们的结果可以接受为近似最优解。

5.4关于问题四
5.4.1问题四模型
对于问题四,部分位置点有送出物件也有带回物件,先得到各点的物件质量差12i i i m m ∆=-,再利用i S M =∆÷得到各个点带回邮件占限制值的百分数,体积同理得到,作出一张图。

其中绿色的点代表体积,蓝色的点代表质量。

由图上明显看到质量超载的可能性很小,所以此问我们只要考虑体积即可。

再根据表中给出的各个物件不超过的时间可以在图上标出,如下图所示。

带框的点代表所到达的时间不得超过13:00,即要求先送的点。

这些点全部集中在黑色以下。

要保证这些点集中在一起先送达,不能分散着送。

由于带回的物件的总体积是6.11立方米,所以至少要分7次送递。

又由于圈越少,所花的时间也越少,所以本文讨论分为7次送递的情形。

现在尝试将以上顶点分为7组。

分组的原则:除遵循第三问中的第一、二、三准则外,还应遵循以下准则:
4.尽量使有时间要求的点分在一个小组。

5.4.2问题四求解
用上述的原则将上图黑线以上分为四组,黑线以下分为三组(根据体积的约束)。

粗略得到四个分组即三条支干,即
Ⅰ51-21-14-9-17-23-16-32
Ⅱ51- 18-10-7-6-1-13-11-12-8-3-4-2-5-15
Ⅲ51-26- 24-19-22-20-30-33-28-25-29
下面我们再依次进行调整
因为Ⅲ中的点25和29的增量就达到了0.96,又在同一支上,所以将这两点归为一组。

于是得到Ⅳ51-25-29
路线Ⅰ的总体积为79.72%,符合要求
路线Ⅱ的总体积为128.87%,由于点15体积较大,又根据准则2将点15调整到路线Ⅲ
路线III加入点15去掉点25,29之后得到的路线51-26- 24-19-22-20-15-30-33-28中总体为90.57%,符合要求。

路线Ⅳ51-25-29-51中总体积96%符合要求。

综上调整后的四条路线都符合体积的约束条件。

下面对时间要求进行调整。

路线Ⅰ最佳哈密顿圈为51-21-9-14-16-32-23-17-51,
用时(小时)0-0.1049-0.3458-0.4769-0.6055-0.7608-0.8462-0.9470-1.1127
路线Ⅱ最佳哈密顿圈为51-18-13-11-12-8-4-5-2-3-6-1-7-10-51,用时0-0.1114-0.2568-0.3542-0.4431-0.5433-0.7681-0.9280-1.0114-1.2474-1.39 61-1.4809-1.5882 -1.6985 -2.0068
路线III最佳哈密顿圈为51-26-24-19-33-28-30-22-20-15-51,用时0-0.0907 -0.2429-0.3599-0.6876-0.7735-0.8490-0.9336-1.0253-1.2123-1.6362
路线Ⅳ最佳哈密顿圈为51-25-29-51,
用时0-0.3421-0.4466-0.8516
由于路线III送完最后一个地点到返回的时间花费最多,为0.4293小时,所以路线III在前四组中安排最后送。

送完所有点的物件共花费5.1834小时>5小时(即超过13:00)。

选取公共点且没有时间规定的点与黑线以上的干支中权最小的没有时间规定并且在干支的最远的点不送,于是去除点21和32,调整后花费的时间为5.01小时,误差仅为3秒钟可以接受。

再将黑线以上的顶点按照第三题的方法分为三组。

5.4.3
问题四结果
6.模型优缺点评价
6.1优点
(1)普适性,模型的适用度较广,能够广泛地应用于一些相似的寻求最佳路线问题。

(2)问题一中,把复杂问题简单化,通过两种模型求得最佳送货路线,且两种模型可互为检验方案。

(3)问题二中,巧妙地把时间约束转化为路程约束,相当于把多个变量通过二者之间的关系减少变量,这样转变之后也可直接利用问题一的算法和思路。

(4)问题三中,分别独立求出路线上使用的时间和交货总时间,避免因为
重复经过某一点而重复考虑交货时间,而且把多个因素单独分开来分析,把复杂问题转化为简单问题。

(6)模型易操作但移植性差,当要运用于求解类似的问题时,准备工作太烦琐。

1、优点:
⑴、本文建立了三个模型,给出了在各种约束条件下的最短时间的计算方法,具有较强的实用性和通用性。

⑵、对于没有条件限制的最短时间问题,我们采用图论方法和lingo软件求解,并用了枚举法进行验证,使结果更准确,更符合实际情况。

⑶、对于加入了时间限制的最短时间问题,我们在第一问基础上进行优化,并借鉴了最优树理论和节约矩阵的方法,多种方法的融合使问题更接近实际。

⑷、在最后一问中,我们给出了计算在货物体积和重量等多个限制条件下的最优化解法,遗传算法、改进的整数规划模型、最大节省原则等算法解决了这个与实际问题非常接近的问题,具有很好的实际意义。

2、缺点:
⑴、为使问题便于研究,我们做了许多假设,这或许对模型的实际意义产生影响。

⑵、本问题并非一个线性问题,加之节点过多,很难做到求出的结果就是最优解。

⑶、本问题中所建立的模型,是舍弃了某些影响因素的结果,尽管这些因素的影响很小,但会使所求结果与实际生活中实际结果产生偏差。

7参考文献
【1】傅家良,运筹学方法与模型,上海:复旦大学,2007
【2】赵静但琦,数学建模与数学实验(第二版),北京:高等教育出版社,2004
【3】张先迪,李正良,图论及其应用,北京:高等教育出版社。

2005
8附录
Floyd算法
function [D,P] = floydwarshall(A)
if isstruct(A),
rp=A.rp; ci=A.ci; ai=A.ai;
[ri ci ai]=csr_to_sparse(rp,ci,ai);
n = length(rp)-1;
else
[ri ci ai]=find(A);
n = size(A,1);
end
nz = length(ai);
computeP = nargout>1;
最小路径程序
function [S,D]=minRoute(i,m,W)
kk=2;[mdd,ndd]=size(dd);
while ~isempty(V)
[tmpd,j]=min(W(i,V));tmpj=V(j);
for k=2:ndd
[tmp1,jj]=min(dd(1,k)+W(dd(2,k),V));
tmp2=V(jj);tt(k-1,:)=[tmp1,tmp2,jj];
end
tmp=[tmpd,tmpj,j;tt];[tmp3,tmp4]=min(tmp(:,1));
if tmp3==tmpd, ss(1:2,kk)=[i;tmp(tmp4,2)];
else,tmp5=find(ss(:,tmp4)~=0);tmp6=length(tmp5); if dd(2,tmp4)==ss(tmp6,tmp4)
ss(1:tmp6+1,kk)=[ss(tmp5,tmp4);tmp(tmp4,2)]; else, ss(1:3,kk)=[i;dd(2,tmp4);tmp(tmp4,2)]; end;end
dd=[dd,[tmp3;tmp(tmp4,2)]];V(tmp(tmp4,3))=[];
[mdd,ndd]=size(dd);kk=kk+1;
end; S=ss; D=dd(1,:);
问题一的程序
clc
clear all
lt=xlsread('dd.xls','B2:C84');%读入点点联系表
size(lt);%输出lt大小
A=zeros(51,51);%初始化A
for i=1:83
A(lt(i,1),lt(i,2))=1;
A(lt(i,2),lt(i,1))=1;
end
disp('邻接矩阵A')
A%输出图的邻接矩阵A
B=xlsread('zb.xls','B2:C52');%读入坐标表
C=zeros(51,51);%初始化C
for i=1:51
for j=1:51
C(i,j)=sqrt((B(i,1)-B(j,1))^2+(B(i,2)-B(j,2))^2); C(j,i)=sqrt((B(i,1)-B(j,1))^2+(B(i,2)-B(j,2))^2); end
end
C;%求出任两点之间的距离矩阵
D=A.*C;
for i=1:51
for j=1:51
if(D(i,j)==0)
D(i,j)=inf;
end
end
end
D;
for i=1:51
for j=1:51
if(i==j)
D(i,j)=0;
end
end
end
D %求出图的权矩阵
disp('最短路矩阵')
E=floydwarshall(D)%生成最短路矩阵
G=xlsread('xx.xls','B2:B31')';
%H=zeros(,1);
for i=1:10000
m=G(randperm(30));
F0(i,:)=[51,m,51];
end
F0;
for k=1:10000
for i=1:30
for j=i+2:31
if(E(F0(k,i),F0(k,j))+E(F0(k,i+1),F0(k,j+1))<E(F0(k,i),F0(k ,i+1))+E(F0(k,j),F0(k,j+1)))
T=F0(k,i+1);
F0(k,i+1)=F0(k,j);
F0(k,j)=T;
end
end
end
end
F0;%生成10000个初始圈的最佳圈
sum=zeros(10000,1);
for i=1:10000
for j=1:31
sum(i,1)=sum(i,1)+E(F0(i,j),F0(i,j+1)); end
end
sum;
[w,l]=min(sum);
disp('最短路')
w
disp('道路')
minway=F0(l,:)
第三问的程序
clc
clear all
P1=[18,14,10,9,7,1,6,13,11,12,15,5,8,3,2,4,16,17,21,23] size(P1)
P2=[26,24,19,25,29,22,20,30,28,33,34,40,50,47,37,41,44,46,4 8]
size(P2)
P3=[31,27,39,36,45,38,43,42,49,35,32]
P=[P1,P2,P3]
sort(P)
size(P3)
Q=xlsread('xx.xls','B2:D101')
size(Q)
sum1=[0,0];
for i=1:20
for j=1:100
if(P1(i)==Q(j,1))
sum1=sum1+Q(j,2:3);
[i,j]
end
end
end
sum1
sum2=[0,0];
for i=1:19
for j=1:100
if(P2(i)==Q(j,1))
sum2=sum2+Q(j,2:3); end
end
end
sum2
sum3=[0,0];
for i=1:11
for j=1:100
if(P3(i)==Q(j,1))
sum3=sum3+Q(j,2:3); end
end
end
sum3
sum=sum1+sum2+sum3
第四问的程序
clc
clear all
P1=[...];
Q=xlsread('xx.xls','B2:D101');
sum=[P1',zeros(length(P1),2)];
sum11=[P1(1),0,0];
for i=1:length(P1)
for j=1:100
if(P1(i)==Q(j,1))
sum11(1,2:3)=sum11(1,2:3)+Q(j,2:3); end
end
end
sum11%求初始质量
B =[1.0000 0.7400 0.0266
2.0000 -0.3500 -0.0201
3.0000 0.5700 0.0917
4.0000 -1.2300 -0.0006
6.0000 -0.5400 -0.0067
7.0000 -0.6000 -0.0013
8.0000 1.2300 0.0090
9.0000 1.2800 0.0713
10.0000 0.0900 0.0580
11.0000 -0.5700 -0.0395
12.0000 -2.6300 -0.0484
13.0000 -3.4900 -0.0364
14.0000 1.9000 0.3709
15.0000 -1.8800 0.4355
16.0000 -0.5400 0.0255
17.0000 -3.5100 -0.0378
18.0000 1.8000 0.1952
19.0000 -2.4900 -0.0111
20.0000 -1.2200 0.1186
21.0000 -3.5300 -0.0724
22.0000 2.2500 0.0027
23.0000 -6.6400 -0.1279
24.0000 -2.3700 -0.0654
25.0000 -3.0900 0.5389
26.0000 -3.7900 -0.0419
28.0000 -0.5200 -0.0380
29.0000 -0.4300 0.3728
30.0000 2.8300 0.0427
31.0000 -0.3800 0.1878
32.0000 -6.9400 -0.0250
33.0000 -4.4000 -0.0627
34.0000 -2.1100 0.0272
35.0000 -0.7500 0.0245
36.0000 -3.7500 0.0219
37.0000 -3.2300 0.0819
38.0000 -3.6700 0.3423
39.0000 -3.6300 -0.1035
40.0000 1.6400 0.3016
41.0000 1.1900 0.4891
42.0000 -3.1500 -0.0155
43.0000 -3.1600 -0.0931
44.0000 0.3200 0.0486
45.0000 -4.5900 -0.0183
46.0000 -0.8100 0.4833
47.0000 -0.6000 -0.0018
48.0000 -0.4200 -0.0492
50.0000 -0.1200 -0.0034];
C=[P1',zeros(length(P1),2)];
for i=1:length(P1)
for j=1:50
if (P1(i)==B(j,1))
C(i,:)=B(j,:);
end
end
end
C;%对第一条线整理
sum(1,2:3)=sum11(1,2:3)+C(1,2:3);
for i=2:length(P1)
sum(i,2:3)=sum(i-1,2:3)+C(i,2:3); end
sum。

相关文档
最新文档