送货路线设计经典版Word文件下载.docx

上传人:b****5 文档编号:17585512 上传时间:2022-12-07 格式:DOCX 页数:29 大小:609.01KB
下载 相关 举报
送货路线设计经典版Word文件下载.docx_第1页
第1页 / 共29页
送货路线设计经典版Word文件下载.docx_第2页
第2页 / 共29页
送货路线设计经典版Word文件下载.docx_第3页
第3页 / 共29页
送货路线设计经典版Word文件下载.docx_第4页
第4页 / 共29页
送货路线设计经典版Word文件下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

送货路线设计经典版Word文件下载.docx

《送货路线设计经典版Word文件下载.docx》由会员分享,可在线阅读,更多相关《送货路线设计经典版Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。

送货路线设计经典版Word文件下载.docx

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

给出结果。

要求标出送货线路。

2.假定该送货员从早上8点上班开始送货,要将1~30号货物的送达时间不能超过指定时间,请设计最快完成路线与方式。

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

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

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

可不考虑中午休息时间。

二·

问题分析

在路线中,每个目的地看作图中的一个节点,各目的地之间的路看作图中连通节点的边,各条路的长度或行驶时间看作对应边上的权所给的线路网就转化为加权网络图,而所求问题就转化为在给定的加权网络图中寻找从给定点O出发行遍所有顶点至少一次再回到O点,使得总权即时间最短。

对于第一道题前三十个货到达的目的地的节点看作点集V,连接任意两点的路线所需时间作为权值赋给对应边,形成边集E得到加权图G(V,E)(因为32和38两地点通过35的路线比其他路都短所以可以两点直接连起而权值为32

的权值和)。

我们可以采用最小生成树法算出0点到任意一点的最短距离,然后根据最短路线逐次加边加权得到从0点出发回到0点的最短路线。

问题二我们将22个节点按时间限制划分为四个阶段,分别为:

最后得出总距离最短的具体路径

问题三;

我们将50个节点按路程近似三等分将区域分为3个区域,在对每个区域运用最小生成树法进行求解。

三·

问题假设

第一问;

1.假设重复的送货地点仍按一件货物的停留时间算,所以不用考虑主要与次要因素问题。

2.经过某一点停留时,才可以加权,否则不能加权。

3.假设送货员非常熟悉地理位置,送货中途不间断,不考虑中午休息时间。

同时也不考虑装货时间。

4.假设用平均速度代表他的行驶速度。

5。

针对第二问;

定义;

两点间最短距离。

就是在连通的所有路上选最短的路程。

如0-13两地的最短距离即为0-18-13的距离和

6.针对第三问;

(1)以上可大胆假设送货员中途返回两次,即三次送完。

(2)又因为每次送货都不超过50公斤,且货物总重148公斤,总体积为2.98立方米,所以三次送货每次携带的货物总重和总体积必须尽量均衡。

(3)可假设有三个送货员同时送货,结果只需把这三个的总时间加起来即可。

四·

模型的符号说明

m表示货物的重量

v表示货物的体积

t表示到达两个地点的时间

T表示总的时间

五·

模型的建立与求解

问题一若将1—30号货物送到指定地点并返回设计最短时间路线方式

经计算得前30号货物的重量是

=49.5公斤<

50公斤

体积为

0.9立方米<

1立方米

所以送货员可以一次送完,而不用考虑是否返回取货。

本题是图上点的行遍性问题。

只取30个点得到路线图如下所示

(1)(前30号货物的目的地除35号地点外)

本题可用最小生成树法求的最小生成树,然后再用模型的改进方案进行初选路线图,最小生成树图如下所示(程序见附录):

图(1.2)最小生成树图

但由于有些连通路线未考虑在内从而走了很多重复路线,所以很可能有比这更短的路径,现在对其改进如下:

(1)最小生成树法的改进模型

对图1的区域采用最小生成树法求出最佳送货路线,但由于其不是完全图所以不一定是最佳解,所以对该算法得到的解需要进一步修正。

在原来算法的基础上改进如下:

当两点之间没有直线连接时,应改进为使其两点的距离最短(两点之间可以经过若干个点).

通过上述修正,可以运用改进的最小生成树算法得到一个不是完全图的最优解H

设送货路线为总长为

,则我们要达到目标可以表示为min

为0或者1,即符合0~1规划模型。

这是一个目标规划模型,下面考虑求解模型的方法:

(28为所走的28条路线的路程)

(28为所走的28条路线的时间)

/60

计算结果如下表所示:

路线

所需时间(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.326

54.619

路线图(1.3)

针对问题二。

我们将22个节点按时间限制划分为四个阶段,分别为:

依据各分区域“路径均较短,则总路径较短”的原则。

各个阶段用最小生成树法求出最短路径。

第一阶段(9:

00以前必须完成)的目的地有(13,18,39,27,24)五个,从O点出发。

一共六个点.算出每两点之间的最短距离.(如0-13两地的最短距离即为0-18-13的距离和.)

由最小生成树得到的路线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

最短路程为15558m

花费的时间为(38.895+15)=53.895<

60分钟。

故第一阶段能按时完成。

同理第二阶段(9:

30以前必须完成)的目的地有(31,45,34,40)四个。

最优路线为;

39-31-34-40-45

最短路程为10049m

花费的时间为(25.1225+12)=37.1225

到达地点45的时间为9:

29.按时到达。

第三阶段(10:

15以前必须完成)的目的地有(43,42,49,38)四个。

45-42-49-42-43-38

最短路程为8056m花费的时间为32.14min

到达最后目的地的时间是10;

03<

10;

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-17-21-26

其路程为53226.59m花费时间为3.27h

针对第三问;

用最小生成树法可得如下图所示的结果

物体的总重量为148kg<

150kg总体积为2.98m3<

3m3

所以我们假设三次送完。

将其分为三部分。

再对其分组:

按实际工作的经验以及以上生成树图有以下准则:

准则一:

尽量使同一干支及其分支上的点分在同一组;

准则二:

应将相邻的干支上的点分成一组;

准则三:

尽量将长的干枝与短的干支分在同一组。

由以上分组原则,我们找到两组分组形式

分组一:

(1,2)(3,4)(5,6)

分组二:

(6,1)(2,3)(4,5)

显然第二种分组不可能为最优解,首先从路线上将其排除,从而得到一种近似最优解,路线如图3.3

在各个子区域内,运用最小生成树法,找出该区域的最佳送货路线,近似解如下表所示:

分组

货物总重

货物总体积

路线总长度

总长度

总时间

1,2

0-26-31-34-40-47-40-37-41-44-48-46-33-28-30-22-

20-22-29-25-19-24-31-26-0

49.52

0.8360

44.557

122.407

行走时间

5.1

+

交货时间

2.5=

7.6

3,4

0-26-31-27-39-27-31-18-13-11-12-15-5-2-4-3-8-1-6-1-7-10-9-14-21-0

48.78

0.9890

44.385

5,6

0-2-17-23-16-23-32-35-38-43-42-49-50-45-36-21-0

49.70

0.9750

33.465

六模型检验

对于上述结果,分三个路线三次送货把整个图划分为三个区域比较均横非常符合模型假设;

且由每个路线货物的总重与货物总体积与所给总货物和总体积的限制范围的相对误差为:

因为总货物的总重量与所限制的总重量的相对误差很小,总体积与所限制的总体积的相对误差也很小,所以三中路线比较均横,检验可通过。

所以上述方案可为最优解,我们假设顺利通。

七模型的评价与推广

模型的优点;

(1)运用上述最小生成树法可得到一个图表,可以一目了然的的确定大概路线。

而在实际生活中,即需要这样的粗略路径来达到实际的目的。

(2)使用了准确的算法和适当的假设,使模型的准确性和实用性到达统一.

(3)对最小生成树法进行了改进.使模型更接近最优化.

模型的缺点;

(1)由于数据较多,没法使用工具进行模型的验证,只能一步一步的精化模型.

(2)本题采用最小生成树法,得出基本的路线图,得出具体情况确实费了一番功夫,运算量相对也较大。

(3)所求的最佳送货路线是近似最优解,而类似的近似最优解可以不止一个,未能在理论上证明本问题最优解得情况

模型的推广;

可充分使用到最短路的一系列问题的求解中。

对运输公司实现最优化和节约能源具有现实的意义。

同时也可运用到旅游方面。

八参考文献

(1)《运筹学》刘桂真等高等教育出版社

(2)《数学模型》姜启源谢金星高等教育出版社

附录;

MATLAB求距离的程序

ShapeX=[9185

1445

7270

3735

2620

10080

10025

7160

13845

11935

7850

6585

7630

13405

2125

15365

14165

8825

5855

780

12770

2200

14765

7790

4435

10860

10385

565

2580

1565

9395

14835

1250

7280

15305

12390

6410

13915

9510

8345

4930

13265

14180

3030

10915

2330

7735

885

11575

8010

];

ShapeY=[500

560

570

670

995

1435

2280

2525

2680

3050

3545

4185

5200

5325

5975

7045

7385

8075

8165

8355

8560

8835

9055

9330

9525

9635

10500

9765

9865

9955

10100

10365

10900

11065

11375

11415

11510

11610

12050

12300

13650

14145

14215

15060

14235

14500

14550

14880

15160

15325

N=length(ShapeX);

fori=1:

N

forj=1:

Distance(i,j)=sqrt((ShapeX(i)-ShapeX(j))^2+(ShapeY(i)-ShapeY(j))^2);

end

Distance

A=zeros(N);

Max_Value=zeros(N);

fork=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<

stdio.h>

#include"

graph.h"

#defineINF32767//INF表示∞

#defineMAXE100//最多边数

typedefstruct

{intu;

//边的起始顶点

intv;

//边的终止顶点

intw;

//边的权值

}Edge;

voidDispMat(MGraphg)

//输出邻接矩阵g

{

inti,j;

for(i=0;

i<

g.vexnum;

i++)

{

for(j=0;

j<

j++)

if(g.edges[i][j]==INF)

printf("

%3s"

"

∞"

);

else

%3d"

g.edges[i][j]);

printf("

\n"

}

}

voidSortEdge(MGraphg,EdgeE[])//从邻接矩阵产生权值递增的边集

inti,j,k=0;

Edgetemp;

if(g.edges[i][j]<

INF)

{

E[k].u=i;

E[k].v=j;

E[k].w=g.edges[i][j];

k++;

}

for(i=1;

k;

i++)//按权值递增有序进行直接插入排序

temp=E[i];

j=i-1;

//从右向左在有序区E[0..i-1]中找E[i]的插入位置

while(j>

=0&

&

temp.w<

E[j].w)

{

E[j+1]=E[j];

//将权值大于E[i].w的记录后移

j--;

}

E[j+1]=temp;

//在j+1处插入E[i]

voidKruskal(EdgeE[],intn,inte)

inti,j,m1,m2,sn1,sn2,k;

intvset[MAXE];

n;

i++)vset[i]=i;

//初始化辅助数组

k=1;

//k表示当前构造最小生成树的第几条边,初值为1

j=0;

//E中边的下标,初值为0

while(k<

n)//生成的边数小于n时循环

{

m1=E[j].u;

m2=E[j].v;

//取一条边的头尾顶点

sn1=vset[m1];

sn2=vset[m2];

//分别得到两个顶点所属的集合编号

if(sn1!

=sn2)//两顶点属于不同的集合,该边是最小生成树的一条边

{

printf("

(%d,%d):

%d\n"

m1,m2,E[j].w);

k++;

//生成边数增1

for(i=0;

i++)//两个集合统一编号

if(vset[i]==sn2)//集合编号为sn2的改为sn1

vset[i]=sn1;

j++;

//扫描下一条边

voidmain()

inti,j,u=3;

MGraphg;

EdgeE[MAXE];

intA[MAXV][50];

g.vexnum=22;

g.arcnum=25;

A[i][j]=INF;

A[0][1]=1296;

A[0][2]=2182;

A[0][3]=1392;

A[1][6]=1823;

A[2][10]=2103;

A[2][4]=3113;

A[2][5]=5342;

A[3][10]=1537;

A[5][6]=2195;

A[5][7]=2607;

A[6][8]=1771;

A[7][8]=2097;

A[8][9]=1311;

A[10][11]=1780;

A[10][12]=1067;

A[10][20]=2324;

A[12][13]=2203;

A[12][18]=1779;

A[13][14]=1537;

A[13][17]=3182;

A[14][15]=2618;

A[15][16]=917;

A[16][17]=2351;

A[16][21]=1971;

A[17][19]=3217;

A[19][20]=1630;

A[j][i]=A[i][j];

g.edges[i][j]=A[i][j];

SortEdge(g,E);

printf("

图G的邻接矩阵:

DispMat(g);

克鲁斯卡尔算法求解结果:

Kruskal(E,g.vexnum,g.arcnum);

while(k

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1