关于校车安排的优化解(成品)

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

目录

一、问题的重述 (1)

二、基本假设 (1)

三、符号说明 (2)

四、问题的分析 (2)

五、模型的建立 (3)

问题1 (3)

i先考虑乘车点个数为1的情况 (4)

ii考虑乘车点个数为2的情况 (4)

iii.考虑乘车点个数为3的情况 (5)

iiii考虑乘车点个数为n的情况 (5)

问题2 (5)

问题3 (6)

问题4 (8)

六、模型优缺点 (8)

优点 (8)

缺点 (9)

七、模型的推广 (9)

1、广度上的推广 (9)

2、深度上的推广 (9)

八、参考文献 (9)

一、问题的重述

我国许多学校都建有新校区,常常需要将老校区的教师和工作人员用校车送到新校区。由于每天到新校区的教师和工作人员很多,往往需要安排许多车辆。如何有效的安排车辆及让教师和工作人员尽量满意是个十分重要的问题。现有如下问题请你设计解决。

假设老校区的教师和工作人员分布在50个区,各区的距离见表1。各区人员分布见表2。

问题1:如要建立n个乘车点,为使各区人员到最近乘车点的距离最小,该将校车乘车点应建立在哪n个点。建立一般模型,并给出n=2,3时的结果。

问题2:若考虑每个区的乘车人数,为使教师和工作人员满意度最大,该将校车乘车点应建立在哪n个点。建立一般模型,并给出n=2,3时的结果。

问题3 若建立3个乘车点,为使教师和工作人员尽量满意,至少需要安排多少辆车?给出每个乘车点的位置和车辆数。设每辆车最多载客47人(假定车只在起始站点载人)。

问题4;关于校车安排问题,你还有什么好的建议和考虑。可以提高乘车人员的满意度,又可节省运行成本。

二、基本假设

1、距离表中列出距离的两区间为互邻区间,人员只能从互邻区间之间通过。

2、人员服从集体最短距离原则,即总体距离最短不符合大于个人最短时,个体

服从。

3、总体距离最短指各区人数与到乘车点最短距离乘积之和最短。

4、人员满意度与其所在区间与乘车点的距离的成反比关系,即定义满意度M=k/s 其中k为比例系数。

三、符号说明

四、问题的分析

我们认为,第一问由于实际意义,必须考虑人数权重,否则没有实际意义。由于各个区的人数不同,则考虑乘车点的侧重比重亦不同,模拟对多数人的侧重,故模仿静力矩概念,定义人数与距离的乘积为“侧重距离”,即当总“侧重距离”最小时总体距离为最小。

我们对问题题一采取分步计算策略。将区间抽象成点,对于n个乘车点的情

种安排方式,运用计算机软件,使用穷举法验证最小值,最况,实际上有C N

50

终找出总体距离最小情况。

首先要解决的是找出不考虑人数时任意两点之间实际距离的最小值,已知成熟的算法有两种,即迪拉科斯特拉贪心算法和floyd算法。由于floyd算法能将任意两点的最短距离以矩阵的形式输出,使得下一步的穷举计算很容易用计算机编程软件实现,故采用floyd算法。由于每个区的人员到乘车点的“最短侧重距离”与其他区人员无关,故当最短距离矩阵得出后将权值乘以区的人数相加即为某几个乘车点的“侧重距离”,再有循环语句进行穷举比较。

由于有满意度的定义,对于问题二,只需在问题一的基础上将“侧重距离”

概念改为“侧重满意度”即可,即在最短距离矩阵求出的情况下,将权值与满意度相乘,再用穷举法计算最小值,其原理仍是各区到乘车点最短距离与其他区人员无关。

现在看问题三,我们有两个目标:一是使人们的满意度最高,二是使车辆数最少。只需要用函数f,使f为满意度与车辆数之比,首先要明白f的值是一个三维数组即f[50][50][50],则只要我们把整个数组都算出来比较出他们中的最大的即可,同时要把对应的那三个区也要找出来。在输出每个区对应的车数及人数就行了。如何把三个区及其对应的车数人数找出来?问题很简单,只要多加几个数组,最好是三维数组,每一次抓三个区作为乘车点时,都用这些数组记录下来车数、人数。具体程序会在附录给出。

对于问题四,我们要提出建议,在此不去赘述。

五、模型的建立

问题1

首先建立floyd算法带权邻接矩阵

表示为:

D(0)=(d

ij (1))

n×n

=S

即将区编号为1~50号,其带权距离邻接矩阵S作为距离矩阵的初值。第一步构造高一阶矩阵即

D(1)=(d

ij (1))

n×n

其中

d ij (1)=min{d

ij

(0),d

i1

(0)+d

1j

(0)}

其表示从将i与j号区之间的以1号为中间点和上一阶最短距离比较的最小距离。

第二步是构造

D(2)=(d

ij (2))

n×n

d ij (2)=min{d

ij

(1),d

i2

(1)+d

2j

(1)}

其表示从i区到j区只允许以1,2区为中间点的路径中的最短距离。

依次类推,第n步构造

D(N)=(d

ij (n))

n×n

其中

d ij (n)=min{d

ij

(n-1),d

in

(n-1)+d

nj

(n-1)}

其表示从i区到j区只允许以1,2,3,4…n为中间点的所有路径中的最短距离,即从i区到j区中间可以插入任何点的距离中最短的距离,于是第n阶矩阵即为最短距离矩阵。

这个过程我们用C语言实现。

在找到最短距离矩阵后计算考虑人数权重后的的总体最短距离。

i先考虑乘车点个数为1的情况

取:S

i =n

1

d

i1

(n)+n

2

d(n)

i2

+n

3

d(n)

i3

+…+n

50

d(n)

i50

等式左边表示以i区为乘车点时各区到其最短距离与人数权积的总和,即以其为乘车点时的最优乘车方式,n表示各区间人数。

再取

K=min{S

1,S

2

,S

3

,…,S

50

}

S

m

=K

即计算出m区为乘车点时有最短总距离。

经过编程运行结果显示m=23

即取23区为乘车点时取到最短距离。

ii考虑乘车点个数为2的情况

S i j (2)=S

i

+S

j

=n

1min{d

1i

,d

1j

}+n

2

min{d

2i

,d

2j

}+…+n

50

min{d

50i

,d

50j

}

等式左边表示以i区和j区为乘车点时各区人员到各自所应到的乘车点与人数乘积后的最小总距离,然后取:

K=min{S

1 2(2),S

1 3

(2),S

1 4

(2),…,S

49 50

(2)}

S

n m

(2)=K

相关文档
最新文档