1、设计最快完成路线与方式。给出结果。要求标出送货线路。2. 假定该送货员从早上8点上班开始送货,要将130号货物的送达时间不能超过指定时间,请设计最快完成路线与方式。3. 若不需要考虑所有货物送达时间限制(包括前30件货物),现在要将100件货物全部送到指定地点并返回。要求标出送货线路,给出送完所有快件的时间。由于受重量和体积限制,送货员可中途返回取货。可不考虑中午休息时间。二问题分析在路线中,每个目的地看作图中的一个节点,各目的地之间的路看作图中连通节点的边,各条路的长度或行驶时间看作对应边上的权所给的线路网就转化为加权网络图,而所求问题就转化为在给定的加权网络图中寻找从给定点O出发行遍所有顶
2、点至少一次再回到O点,使得总权即时间最短。对于第一道题前三十个货到达的目的地的节点看作点集V,连接任意两点的路线所需时间作为权值赋给对应边,形成边集E得到加权图G(V,E)(因为32和38两地点通过35的路线比其他路都短所以可以两点直接连起而权值为32的权值和)。 我们可以采用最小生成树法算出0点到 任意一点的最短距离,然后根据最短路线逐次加边加权得到从0点出发回到0点的最短路线。问题二我们将22个节点按时间限制划分为四个阶段,分别为:最后得出总距离最短的具体路径问题三;我们将50个节点按路程近似三等分将区域分为3个区域,在对每个区域运用最小生成树法进行求解。三问题假设第一问;1.假设重复的送
3、货地点仍按一件货物的停留时间算,所以不用考虑主要与次要因素问题。2.经过某一点停留时,才可以加权,否则不能加权。3. 假设送货员非常熟悉地理位置,送货中途不间断,不考虑中午休息时间。同时也不考虑装货时间。4.假设用平均速度代表他的行驶速度。5。针对第二问;定义;两点间最短距离。就是在连通的所有路上选最短的路程。如0-13两地的最短距离即为0-18-13的距离和6.针对第三问;(1)以上可大胆假设送货员中途返回两次,即三次送完。(2)又因为每次送货都不超过50公斤,且货物总重148公斤,总体积为2.98立方米,所以三次送货每次携带的货物总重和总体积必须尽量均衡。(3)可假设有三个送货员同时送货,
4、结果只需把这三个的总时间加起来即可。四模型的符号说明m表示货物的重量v表示货物的体积t表示到达两个地点的时间T表示总的时间五模型的建立与求解问题一 若将130号货物送到指定地点并返回 设计最短时间路线方式经计算得前30号货物的重量是 =49.5公斤 50公斤体积为 0.9立方米 1立方米 所以送货员可以一次送完,而不用考虑是否返回取货。本题是图上点的行遍性问题。只取30个点得到路线图如下所示图(1)(前30号货物的目的地除35号地点外)本题可用最小生成树法求的最小生成树,然后再用模型的改进方案进行初选路线图,最小生成树图如下所示(程序见附录):图(1.2)最小生成树图 但由于有些连通路线未考虑
5、在内从而走了很多重复路线,所以很可能有比这更短的路径,现在对其改进如下:(1)最小生成树法的改进模型对图1的区域采用最小生成树法求出最佳送货路线,但由于其不是完全图所以不一定是最佳解,所以对该算法得到的解需要进一步修正。在原来算法的基础上改进如下:当两点之间没有直线连接时,应改进为使其两点的距离最短(两点之间可以经过若干个点).通过上述修正,可以运用改进的最小生成树算法得到一个不是完全图的最优解H设送货路线为总长为,则我们要达到目标可以表示为min,为0或者1,即符合01规划模型。这是一个目标规划模型,下面考虑求解模型的方法:(28为所走的28条路线的路程)(28为所走的28条路线的时间)/6
6、0计算结果如下表所示:路线所需时间(h)路线长度(km) O-18-13-19-24-31-27-39-27-31-34-40-45-42-49-42-43-38-36-38-35-32-23-16-14-17-21-26-O.3.32654.619路线图(1.3)针对问题二。我们将22个节点按时间限制划分为四个阶段,分别为:依据各分区域“路径均较短,则总路径较短”的原则。各个阶段用最小生成树法求出最短路径。 第一阶段(9:00以前必须完成)的目的地有(13,18,39,27,24)五个,从O点出发。一共六个点.算出每两点之间的最短距离.(如0-13两地的最短距离即为0-18-13的距离和.)
7、由最小生成树得到的路线o-18-13-18-31-24-31-27-39;实际上通过计算有13-18-31-24的路程6997m大于13-19-24的路程5715m。经过改进得到最优路线为;O-18-13-19-24-27-39最短路程为15558 m 花费的时间为(38.895+15)=53.89560分钟。故第一阶段能按时完成。同理第二阶段(9:30以前必须完成)的目的地有(31,45,34,40)四个。最优路线为;39-31-34-40-45最短路程为10049 m 花费的时间为(25.1225+12)=37.1225到达地点45的时间为9:29.按时到达。第三阶段(10:15以前必须完
8、成)的目的地有(43,42,49,38)四个。45-42-49-42-43-38最短路程为 8056m 花费的时间为32.14min到达最后目的地的时间是10;0310;15第四阶段(12:00以前必须完成)的目的地有(32,23,16,36,26,21,14,17)八个。38-36-38-35-32-23-16-14-17-21-26最短路程为 19220(m ) 花费的时间为(48.05+24)=72.05(min)到达的时间为11;16、故行走路线为;O-18-13-19-24-27-39-31-34-40-45-42-49-42-43-38-36-38-35-32-23-16-14-1
9、7-21-26其路程为 53226.59m 花费时间为3.27h针对第三问;用最小生成树法可得如下图所示的结果物体的总重量为 148kg 150kg 总体积为 2.98 m3 3m3所以我们假设三次送完。将其分为三部分。再对其分组:按实际工作的经验以及以上生成树图有以下准则: 准则一:尽量使同一干支及其分支上的点分在同一组; 准则二:应将相邻的干支上的点分成一组; 准则三:尽量将长的干枝与短的干支分在同一组。由以上分组原则,我们找到两组分组形式 分组一:(1,2)(3,4)(5,6) 分组二:(6,1)(2,3)(4,5)显然第二种分组不可能为最优解,首先从路线上将其排除,从而得到一种近似最优
10、解,路线如图3.3在各个子区域内,运用最小生成树法,找出该区域的最佳送货路线,近似解如下表所示:分组货物总重货物总体积路线总长度总长度 总时间1,20-26-31-34-40-47-40-37-41-44-48-46-33-28-30-22-20-22-29-25-19-24-31-26-049.520.836044.557 122.407 行走时间5.1+交货时间2.5 =7.63,40-26-31-27-39-27-31-18-13-11-12-15-5-2-4-3-8-1-6-1-7-10-9-14-21-048.780.989044.3855,60-2-17-23-16-23-32-3
11、5-38-43-42-49-50-45-36-21-049.700.975033.465六 模型检验 对于上述结果,分三个路线三次送货把整个图划分为三个区域比较均横非常符合模型假设;且由每个路线货物的总重与货物总体积与所给总货物和总体积的限制范围的相对误差为: 因为总货物的总重量与所限制的总重量的相对误差很小,总体积与所限制的总体积的相对误差也很小,所以三中路线比较均横,检验可通过。 所以上述方案可为最优解,我们假设顺利通。七 模型的评价与推广模型的优点;(1) 运用上述最小生成树法可得到一个图表,可以一目了然的的确定大概路线。而在实际生活中,即需要这样的粗略路径来达到实际的目的。(2) 使用
12、了准确的算法和适当的假设,使模型的准确性和实用性到达统一.(3)对最小生成树法进行了改进.使模型更接近最优化.模型的缺点;(1)由于数据较多,没法使用工具进行模型的验证,只能一步一步的精化模型. (2)本题采用最小生成树法,得出基本的路线图,得出具体情况 确实费了一番功夫,运算量相对也较大。(3)所求的最佳送货路线是近似最优解,而类似的近似最优解可以不止一个,未能在理论上证明本问题最优解得情况模型的推广;可充分使用到最短路的一系列问题的求解中。对运输公司实现最优化和节约能源具有现实的意义。同时也可运用到旅游方面。八 参考文献(1)运筹学 刘桂真等 高等教育出版社(2)数学模型 姜启源 谢金星
13、高等教育出版社附录;MATLAB 求距离的程序ShapeX = 918514457270373526201008010025716013845119357850658576301340521251536514165882558557801277022001476577904435108601038556525801565939514835125072801530512390641013915951083454930132651418030301091523307735885115758010;ShapeY = 500560570670995143522802525268030503545418
14、552005325597570457385807581658355856088359055933095259635105009765986599551010010365109001106511375114151151011610120501230013650141451421515060142351450014550148801516015325N=length(ShapeX);for i=1:N for j=1:Distance(i,j)=sqrt(ShapeX(i)-ShapeX(j)2+(ShapeY(i)-ShapeY(j)2);end Distance A=zeros(N);Max_
15、Value=zeros(N);for k=1:max_line,column=max(Distance(k,:);A(k,column)=max_line;Max_Value(k,column)=max(max(A) I,J=find(Max_Value)point_start=ShapeX(I) ShapeY(I)point_end=ShapeX(J) ShapeY(J)问题1最小生成树法#include #include graph.h#define INF 32767 /INF表示#define MAXE 100 /最多边数typedef struct int u; /边的起始顶点 in
16、t v; /边的终止顶点 int w; /边的权值 Edge;void DispMat(MGraph g)/输出邻接矩阵g int i,j; for (i=0;ig.vexnum;i+) for (j=0;jj+) if (g.edgesij=INF) printf(%3s,); else%3d,g.edgesij); printf(n void SortEdge(MGraph g,Edge E) /从邻接矩阵产生权值递增的边集 int i,j,k=0; Edge temp; if (g.edgesij=0 & temp.wEj.w) Ej+1=Ej; /将权值大于Ei.w的记录后移 j-;
17、Ej+1=temp; /在j+1处插入Eivoid Kruskal(Edge E,int n,int e) int i,j,m1,m2,sn1,sn2,k; int vsetMAXE;n;i+) vseti=i; /初始化辅助数组 k=1; /k表示当前构造最小生成树的第几条边,初值为1 j=0; /E中边的下标,初值为0 while (kn) /生成的边数小于n时循环 m1=Ej.u;m2=Ej.v; /取一条边的头尾顶点 sn1=vsetm1;sn2=vsetm2; /分别得到两个顶点所属的集合编号 if (sn1!=sn2) /两顶点属于不同的集合,该边是最小生成树的一条边 printf
18、( (%d,%d):%dn,m1,m2,Ej.w); k+; /生成边数增1 for (i=0;i+) /两个集合统一编号 if (vseti=sn2) /集合编号为sn2的改为sn1 vseti=sn1; j+; /扫描下一条边void main() int i,j,u=3; MGraph g; Edge EMAXE; int AMAXV50; g.vexnum=22;g.arcnum=25; Aij=INF; A01=1296;A02=2182;A03=1392; A16=1823; A210=2103;A24=3113;A25=5342; A310=1537; A56=2195;A57=
19、2607; A68=1771; A78=2097; A89=1311; A1011=1780;A1012=1067;A1020=2324; A1213=2203;A1218=1779; A1314=1537; A1317=3182; A1415=2618; A1516=917; A1617=2351;A1621=1971; A1719=3217; A1920=1630; Aji=Aij; g.edgesij=Aij; SortEdge(g,E); printf(图G的邻接矩阵: DispMat(g);克鲁斯卡尔算法求解结果: Kruskal(E,g.vexnum,g.arcnum); while (k
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1