地震灾区紧急资源的最优调度问题.docx

上传人:b****4 文档编号:11988359 上传时间:2023-04-16 格式:DOCX 页数:19 大小:100.68KB
下载 相关 举报
地震灾区紧急资源的最优调度问题.docx_第1页
第1页 / 共19页
地震灾区紧急资源的最优调度问题.docx_第2页
第2页 / 共19页
地震灾区紧急资源的最优调度问题.docx_第3页
第3页 / 共19页
地震灾区紧急资源的最优调度问题.docx_第4页
第4页 / 共19页
地震灾区紧急资源的最优调度问题.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

地震灾区紧急资源的最优调度问题.docx

《地震灾区紧急资源的最优调度问题.docx》由会员分享,可在线阅读,更多相关《地震灾区紧急资源的最优调度问题.docx(19页珍藏版)》请在冰豆网上搜索。

地震灾区紧急资源的最优调度问题.docx

地震灾区紧急资源的最优调度问题

A题资源的最优分配与调度问题

摘要近年来全球的大规模自然灾害频繁发生,海啸、地震、飓风等,特别是2008年发生在我国四川汶川地区的大地震,是我国自建国以来影响非常大的一次灾害,造成了大量的人员与财产损失。

因此,在地震发生后,将救援队伍与紧缺物资快速合理地分配调运到指定受灾区域对抗震救灾工作具有重要的意义。

本文针对灾区的受灾程度及其地理位置的不同,采用了线性规划的0—1模

型、Floyd最短路径法、匈牙利算法等,研究了在最短时间内实现对人力资源以及物资资源的最优调度与分配方案。

我们考虑到受灾地区之多,受灾情况的不同,以及救援队伍和救灾物资的限制,建立了线性规划中的0—1模型。

对于192个特灾区,我们首先分配相应的192支A类救援队伍进行急救,争取在最短时间内分配救援人员和物资到达灾区。

对于514个重灾区,我们先分配106支B类队伍去距离较远的106个重灾区施救,接着附近剩余的412个重灾区分别由其他204支C类队伍进行施救,且每支队伍负责救援2个灾区。

然后借助于Floyd最短路径算法计算出救援队伍集结点到灾区的最短路径,进一步利用Matlab软件对数据进行计算和筛选,去除异常数据,得到合理有效的方案。

由于灾区情况紧急,不能及时调度大量飞机进行救援,所以为了简化问题,我们假设只用陆运去施救,而且陆运救灾队伍和物资都可以到达各个灾区,由此可建立最短路径模型。

我们采用了匈牙利算法求得路由矩阵,并利用Lingo软件计算,从而得出快速合理的调度方案。

关键词线性0—1规划;Floyd最短路径法;匈牙利算法;权值最小

1问题重述

灾难无情人有情,一方有难,八方支援,灾难激发了全国同胞众志成城、携手并肩救死扶伤、战胜困难、重建和谐生活、重建美好家园的决心和信心。

当地震、瘟疫等灾害事件发生时,如何在最短时间内实现对人力资源以及物资资源的最优调度与分配是十分重要的问题。

2008年我国的四川汶川地区发生的大地震是我国自建国以来影响非常大的一次地震,造成了大量的人员与财产损失。

因此,我们的救援队伍要以最快速度、最大资源、最大效率进行快速合理的救援。

问题分析:

(1)参照附录中的表

(2)和表(3)所给出的灾区的x和y坐标,由于受

灾区的地理位置不同,而且受灾程度也不同,所以为了最大限度进行合理施救,我们要由重到轻、由近及远依次救援,先要解决燃眉之急。

即每个特灾区均分配一支救援队伍施救,每两个重灾区至少分配一支救援队伍进行施救,做出最优的

救援方案。

(2)我们有500支救援队伍,分别分布在30个不同的集结点,根据,队伍的集结点位置和灾区的地理位置,尽可能选择最短路径进行施救。

由受灾区域的道路网络示意图(图01/02)可以看出,特灾区相对比较集中,故先调度192支救援队伍抄近路对其施救。

然后根据受灾乡镇之间的道路是否通路的情况,再调度剩余的308支队伍分别对各个灾区进行施救,争取在最短时间内,选取最短路径到达受灾区,最快速度抢救被困群众,最大限度降低灾害损失。

灾难不等人,

我们更不能怠慢,灾难面前,人人有责。

下图是部分特灾区,重灾区和救援队伍的分部示意图:

***

++

图i:

部分特灾区,重灾区和救援队伍的分部

2模型假设

(1)将每支A救援队伍看成是一个整体。

(2)将每支B救援队伍看成是一个整体。

(3)将每支C救援队伍看成是一个整体。

(4)192个特灾区所辖的每个乡镇均分配一支A类救援队伍。

(5)408个重灾区所辖的邻近的两个区县都均分配一支B类救援队伍。

(6)106个重灾区所辖的每个乡镇均分配一支C类救援队伍

(7)分配好的救援队伍到达各个乡镇之间的道路无阻塞。

(8)紧急情况之下,没有空救,只有陆运救援队伍。

(9)所有特灾区灾情差不多,所有重灾区灾情差不多。

(10)每支救援队伍到达灾区的速度是一样的。

3符号说明

m救援队伍的数量;

n:

受灾地区的个数;

A:

救援某一个特灾区的队伍类型;

B:

救援某两个重灾区的队伍类型;

C:

救援某一个重灾区的队伍类型;

xij(i=1,2,,,m;j=1,2,,,n):

决策变量;

cij(i=1,2,,,m;j=1,2,,,n):

第i支队伍救援第j个灾区;

dij(i=1,2,,,m;j=1,2,,,n):

第i支队伍救援第j个灾区的最短距离;

G(V,E):

灾区网络图,V是灾区点的集合,E是连接每两个灾区的道路边的集合。

4模型建立与求解

4.1模型建立

根据各个灾区的地理位置,将其简化为图模型,即以各个灾区之间相通的道路建立网络图G(V,E),V是灾区点的集合,共有706个灾区,则就有706个点。

E是连接每两个灾区的道路边的集合,共有706条边,每条边赋予一个权值,即就是灾区之间的距离。

考虑到受灾地区之多,受灾情况的不同,以及救援队伍和救灾物资的限制,我们依据模型I的建立,我们首先分配192支A类救援队伍对192个特灾区进行急救,争取在最短时间内分配救援人员和物资到达灾区。

然后我们再分配106支B类队伍去距离较远的106个重灾区施救,接着附近剩余的406个重灾区分别由其他204支C类队伍进行施救,且每支队伍负责救援2个灾区。

4.1.1

0-1规划模型:

特灾区救援:

192192

目标函数:

minz=vCijXij

iJjJ

『192

 

约束条件:

救援特灾区的A类队伍是1—192个,即1

重灾区救援:

区也是1—514,即1

4.1.2匈牙利算法的基本原理:

 

它们分布在方阵的不同行、不同列上,并且这些元素之和为最小。

而要使这

些元素之和为最小,就要使其中的每一个元素尽可能的小——最好这些元素都是其所在行和列的最小元素。

而指派问题的最优解又有这样的性质:

如果从分配问题效率矩阵的一行(列)各元素中分别减去该行(列)的最小元素,得到新的矩阵求得最优解相同。

由于新矩阵中每行、每列的最小元素均为“0”,因此,求原指派问题的最优解就转化为在新矩阵中找出n个分布在不同行、不同列上的“0”元素(简称为独立0元素),这些独立0元素就是新矩阵的最优解,找到新矩阵的最优解也就找到原矩阵的最优解了。

要在新的矩阵中找到几个分布在不同行,不同列上的“0”元素,前提首先

是在新矩阵中确定存在几个这样的“0”元素。

那么,如何判断在新矩阵中是否存在n个这样的独立0元素呢?

考尼格证明了这样一个定理:

“覆盖所有”0“元素的最少直线数等于矩阵中独立元素0的最多个数。

"利用这一定理,就可以通过寻找“能覆盖所有0元素的最少直线”来确定新的矩阵中独立0元素的具体数量。

倘若新矩阵中独立0元素的数量小于矩阵的阶数n,就得继续对新矩阵进行化简,直到有了n个独立的0元素为止,找到这n个独立元素也就找到了救援队伍指派问题的最优解。

4.2模型求解

本题是最优分配问题,众所周知,此问题属于NP完全问题,即求解没有多项式时间算法.(Non-deterministicPolynomial)显然本问题更应属于NP完全

问题.有鉴于此一定要针对问题的实际特点寻找简便方法,想找到解决此类问题的一般方法是不现实的,对于规模较大的问题可使用近似算法来求得近似最优解。

4.2.1Matlab软件处理数据

将题目所给出的表

(1)、

(2)、(3)、(4)中的各个数据输入到Matlab软件编辑窗口中,根据表

(2)和表(3)给出的每个灾区的地理坐标,计算出图

中每条边的权值并按照权值升序的顺序排列,形成能够显示边信息的矩阵K。

为救援队伍分散在不同的集结点,故将每支救援队伍分配到与它距离最近的受灾区域,并假设存在任一条通路,可以使救援队伍到达。

422Floyd算法计算任意两点之间的距离

(1)按照Floyd最短路径算法(附录一),计算出网络图G中每个顶点到其它顶点的最短路径矩阵d和路由矩阵r,部分如下矩阵d和路由矩阵r如下:

(2)

表1:

最短路径d

1

2

3

4

5

6

7

8

9

10

11

0.00

7.24

2.66

3.52

4.10

7.07

1.17

8.49

9.42

1

E+00

E+05

E+05

Inf

E+05

E+05

E+05

E+06

Inf

E+05

E+05

7.24

0.00

9.90

3.72

1.13

1.68

4.80

1.59

2.51

2

E+05

E+00

E+05

Inf

E+05

E+06

E+04

E+05

Inf

E+05

E+05

2.66

9.90

0.00

6.18

1.44

9.73

1.44

1.11

1.21

3

E+05

E+05

E+00

Inf

E+05

E+05

E+05

E+06

Inf

E+06

E+06

0.00

4.26

4

Inf

Inf

Inf

E+00

Inf

Inf

Inf

Inf

E+05

Inf

Inf

3.52

3.72

6.18

0.00

7.61

3.56

8.19

4.97

5.90

5

E+05

E+05

E+05

Inf

E+00

E+05

E+05

E+05

Inf

E+05

E+05

4.10

1.13

1.44

7.61

0.00

1.12

1.58

1.26

1.35

6

E+05

E+06

E+05

Inf

E+05

E+00

E+06

E+06

Inf

E+06

E+06

7.07

1.68

9.73

3.56

1.12

0.00

4.63

1.42

2.35

7

E+05

E+04

E+05

Inf

E+05

E+06

E+00

E+05

Inf

E+05

E+05

1.17

4.80

1.44

8.19

1.58

4.63

0.00

3.21

2.29

8

E+06

E+05

E+06

Inf

E+05

E+06

E+05

E+00

Inf

E+05

E+05

4.26

0.00

9

Inf

Inf

Inf

E+05

Inf

Inf

Inf

Inf

E+00

Inf

Inf

8.49

1.59

1.11

4.97

1.26

1.42

3.21

0.00

9.27

10

E+05

E+05

E+06

Inf

E+05

E+06

E+05

E+05

Inf

E+00

E+04

9.42

2.51

1.21

5.90

1.35

2.35

2.29

9.27

0.00

11

E+05

E+05

E+06

Inf

E+05

E+06

E+05

E+05

Inf

E+04

E+00

1.43

2.83

12

Inf

Inf

Inf

E+05

Inf

Inf

Inf

Inf

E+05

Inf

Inf

1.29

1.22

1.32

1.26

1.33

1.22

1.27

1.24

1.25

13

E+07

E+07

E+07

Inf

E+07

E+07

E+07

E+07

Inf

E+07

E+07

14

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

15

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

16

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

17

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

18

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

19

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

20

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

21

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

22

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

23

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

Inf

表2:

路由矩阵r

1

5

3

4

5

3

5

5

9

5

5

7

2

7

4

7

7

7

7

9

7

7

1

1

3

4

1

6

1

1

9

1

1

1

2

3

4

5

6

7

8

12

10

11

1

7

1

4

5

1

7

7

9

7

7

3

3

3

4

3

6

3

3

9

3

3

5

2

5

4

5

5

7

10

9

10

10

11

11

11

4

11

11

11

8

9

11

11

1

2

3

12

5

6

7

8

9

10

11

7

7

7

4

7

7

7

11

9

10

11

10

10

10

4

10

10

10

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

7

7

7

4

7

7

7

7

9

7

7

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

1

2

3

4

5

6

7

8

9

10

11

(2)在矩阵K中,找到前面距离较短的204条边,因为K中边的长度是按照从小到大的顺序排列的。

将这204条边的每条边的两个端点看作一个整体,则

相当于B类救援队伍去救由两个端点所组成的一个整体灾区,这就简化成了共有

502支队伍救援502个重灾区。

再将502支队伍从第一个集结点开始依次编号,此问题就可以看作是匹配问题,使得边权值之和最小,即救援路径最短,利用匈牙利算法便可对此问题进行求解。

(3)匈牙利算法是实现二部图的分配问题的方法,因此首先要先建立每个队伍到达各个灾区的最短距离矩阵。

本次求解根据假设,可以利用、、、、软件

编写程序(附录2),建立救援队伍i(仁

由于匈牙利算法要求所输入的矩阵是方阵,而si矩阵是706*502的行列不等矩阵,贝U需要删除掉204行,即去除204个顶点,再将502个灾区重新排号。

为降低求解的复杂度,删除矩阵K勺第一列的前204个顶点所对应的204行,则得到502*502的一个方阵,再将此方阵转置得到矩阵sii,即可方便求解。

程序如下:

fori=1:

204

si(K(i,1),:

)=[]

i=i+1;

end

(4)匈牙利算法求解步骤(程序见附录4):

设图G=(X,Y,E)是一个二元图,M是任意一个匹配:

Step1:

令S=kkong,T=yihuo;转Step2;

Step2:

若M饱和X/S的每个顶点,则M是最大匹配,否则,取M-非饱和点u€X/S,令S:

=SU{u};转Step3;

Step3:

若N(S)=T,转Step6,否则取y€N(S)/T。

若y是-M饱和点,转Step4,否则转Step5。

Step4:

存在x€X使得(y,x)€M,则令:

S:

=SU{x},T:

=TU{y},转Step3。

Step5:

u-y路是M-增广路,设为P,并令M:

=MyihuoP,转Step1;

Step6:

若X/S=kong,贝UM是最大匹配,否则转Step2。

(5)打开匈牙利算法的程序,在CommandWindoW中输入[matching,cost]=Hungarian(sii),调用编写的匈牙利函数,返回的matching矩阵是一个大小与sii完全相同的0,1矩阵,其中0元素表示sii中相同位置的元素未被选中,1表示A中相同位置的元素被选中。

由于matching矩阵中0元素较多,为了能够更加清楚显示某个救援队伍营救具体的灾区的情况,编写函数如下:

[row,col]=find(matching==1);

final=[row,col]

final矩阵中显示的就是某个救援队伍营救某一个灾区的情况。

cost是指救援所需要经过的最短距离。

经过Matlab软件的计算,可以等到cost=7.7266e+07

5模型评价

本文主要采用Floyd最短路径算法,匈牙利最优分配分配算法,0-1整数规划模型等对地震灾区紧急资源的最有调度问题进行研究,其中,用Floyd算法并结合就近原则进行研究,同时利用最优分配的匈牙利算法,较好的对救援队和灾区之间进行了分配,并且可以根据路由矩阵,最快的达到灾区,假设合理,结果较好。

但是本文也存在着一些不足之处,模型假设中一个救援队伍只能救一个特灾区,一个救援队伍可以救两个重灾区,这一条假设存在着很大的特殊性,若非政策要求,不然这只是可能性的一种,应该在队伍中做一个有效的分配。

其次,过程中用到的近似和等价思想可能对结果产生一定的偏差。

另外,模型求解中将灾区重新排列后,在最后的方案中没有做进一步的将灾区重新还原成原来的序号。

6模型改进

本文求解的假设之一是建立在每条道路交通都完好的情况下,也就是每个救援队都能顺利的通过这条道路,达到灾区,但是,地震所造成的危害是巨大的,往往会导致道路发生损害,那么就不能按照原来设定好的路径的方式,那么就需要改变路径,在本次求解中我们已经根据floyd算法得到每两个点之间的最短路径矩阵d和路由矩阵r,当有道路发生损害时,即图中某条边缺少,此时就要重新计算边权的矩阵,用Dijkstra算法计算出这一点道所有点的最短距离矩阵和路由矩阵,再按照前面所讲述的方法得到新的路径。

参考文献

[1]姜启源,谢金星,叶俊•数学规模(M):

北京.高等教育出版社,2003.

[2]袁新生丄ingo和Excel在数学建模中的应用[M].北京.科学出版社:

2007。

[3]王琦.MATLAB基础与应用实例集萃[I].北京:

人民邮电出版社,2007.

[4]谭用基,蔡志杰.数学规模[M].上海.复旦大学出版社.2005.

[5]孙勇.基于网络模型的应急资源优化配置[J].计算机工程。

1:

290-292,2011

⑹卓金武.Matlab在数学建模中的应用(M:

北京•北京航空航天出版社,2011.4

[7]王海英,黄强,李传涛,褚宝增.图论算法及其Matlab的实现(M:

北京.北京航空航天出版社,

[8]n-algorithm

附录一Floyd程序

function[d,r]=floyd(a)

n=size(a,1);

d=a;

fori=1:

n

forj=1:

n

r(i,j)=j;

end

end

%r

fork=1:

n

fori=1:

n

forj=1:

n

ifd(i,k)+d(k,j)

end

end

end

k

d

r

end

附录二:

匈牙利算法程序

function[Matching,Cost]=Hungarian(Perf)

Matching=zeros(size(Perf));

num_y=sum(~isinf(Perf),1);

num_x=sum(~isinf(Perf),2);

x_con=find(num_x~=0);

y_con=find(num_y~=0);

P_size=max(length(x_con),length(y_con));

P_cond=zeros(P_size);

P_cond(1:

length(x_con),1:

length(y_con))=Perf(x_con,y_con);

ifisempty(P_cond)

Cost=0;

return

end

Edge=P_cond;

Edge(P_cond~=Inf)=0;

cnum=min_line_cover(Edge);

Pmax=max(max(P_cond(P_cond~=Inf)));

P_size=length(P_cond)+cnum;

P_cond=ones(P_size)*Pmax;

P_cond(1:

length(x_con),1:

length(y_con))=Perf(x_con,y_con);

exit_flag=1;

stepnum=1;

whileexit_flag

switchstepnum

case1

[P_cond,stepnum]=step1(P_cond);

case2

[r_cov,c_cov,M,stepnum]=step2(P_cond);

case3

[c_cov,stepnum]=step3(M,P_si

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

当前位置:首页 > 经管营销 > 经济市场

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

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