承诺书
我们仔细阅读了数学建模竞赛选拔的规则.
我们完全明白,在做题期间不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人研究、讨论与选拔题有关的问题。
我们知道,抄袭别人的成果是违反选拔规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守选拔规则,以保证选拔的公正、公平性。如有违反选拔规则的行为,我们将受到严肃处理。
我们选择的题号是(从A/B/C中选择一项填写): B
队员签名:1. 崔晓鹏
2. 孙艳坤
3. 范常青
日期: 2011 年 08 月 24 日
编号专用页评阅编号(评阅前进行编号):
B 地震灾后的物资分配
摘要
通过层次分析法和模糊综合判别的模型,经过分析灾区受灾情况和受灾人员,求得不同灾区所受灾害严重权重(1,2,3)i W i = (i 表示不同的受灾地区),从而确定不同灾区的物资需求量,然后由物资供应点与受灾地区构造距离矩阵(1,2,3;1,2,3)ij D i m j n == (i 表示不同物资供应点,j 表示不同的受灾地区),建立规划模型,由约束条件得到供需向量(1,2,3;1,2,3)ij X i m j n == ,从而求解目标值11min()m
n
ij ij i j S D X ===∑∑规划问题。
以汶川地震为例,搜集相关数据(见附录6),求解得到灾后物资优化分配,根据模型得到的结论,提出部分建议。
一、问题重述
近年来,我们生活的地球发生了多次大地震,虽然地震的预测目前比较困难,但如果在灾后能及时援救,可以很大程度减少伤亡,其中救援物资的分配非常关键。在我国汶川大地震中,由于物资调配及时,在很大程度上降低了灾害的影响。 为研究地震灾害后的物资分配,考虑以下问题:
1. 考虑灾区、受灾者和物资等的不同,建立数学模型制定分配原则并给出合理的分配方法。
2. 收集各类实际数据,给出一个符合题意的数值算例。
3. 通过以上分析,给出你的量化优化方案及建议。
二、模型假设
1. 物资供应量能够满足灾区物资需求量。
2. 物资供应点与灾区需求点距离按照两地之间的直线距离。
3. 物资供应点分配方式道路运输不行时可以采取空中运输等方式。
三、符号说明
1.12(,,...,)m W w w w =
:不同灾区的受灾程度权重。
2.12(,,...,)
T n Y y y y = :综合评价向量。
3.'
'1
2''T
n Y y y y ??=??
:综合评价值权重向量。
4.m :m 个物资供应点。
5.n : n 个受灾区。
6.(1,2,3,,)i a i m = :代表每个供应点有救灾物资。
7.(1,2,3)j b j n = :代表每个受灾点需要救援物资。
8.(1,2,3,;
1,2,3)ij D i m j n == :物资供应点与受灾区之间的距离矩阵。
9.X
:评价指标向量。
10.1,2,n C C C :不同的准则;
四、问题分析
问题1:
第一问要求考虑灾区、受灾者和物资等的不同,建立数学模型制定分配原则并给出合理的分配方法。不同灾区受灾严重情况不同,所以要建立模型:按照受灾严重情况求出不同地区的受灾程度,根据受灾程度来决定受灾物资分配多少。还要考虑到救灾物资如何分配,比如,共有m 个物资供应点,n 个受灾区,如何将m 个物资供应点的物资高效的分配到灾区。剩下的问题就是解决将有限的救灾物资投入到应急救援最急需的地方,实现最优化配置问题。可以通过建立物资集散地与受灾区的距离矩阵,转化成求解最短路径问题,从而达到救灾物资的最优分配。
问题2:
第二问要求通过收集各类实际数据,给出一个符合题意的数值算例。以汶川地震为例,收集相关数据,受灾区距震中的距离、人口密度、受伤人数、死亡人数及经济发展程度数据,根据第一问建立的分配模型来求解灾区物资的优化分配。 问题3:
通过第一问所建立的模型,以及第二问的数值解给出量化分配方案和建议。
五、模型建立与求解
问题1:
通过评估不同灾区受灾的严重程度,从而受灾程度得到不同灾区物资分配多少,可以用两种方法求解受灾严重程度:模糊评判和层次分析。下面分别介绍两种方法求解过程。
求解不同灾区救灾物资需求量:
模型(1)模糊综合评判
1、评价对象
受灾地区:12,...n N N N 下标n 代表有n 个不同评价对象 2、评价指标 受灾因素:
12(,,...,)
T m X x x x = 下标m 代表m 个不同的评价指标
3、权重系数 权重向量:
12(,,...,)m W w w w =
其中1
1,1m i i w w ≤=∑
4、价值权重
综合评价向量:
12(,,...,)T
n Y y y y =
模型求解:
Y XW =
即:1111211221
22221
2
m m n n n nm m y x x x w y x x x w y x x x w ??????
????????????=??
????????????????
5、综合评价值权重归一化
'
1
i
i n
i
i y y y
==
∑
'
'
1
2''T
n Y y y y ??=??
模型(2)层次分析法
目标层:O 方案层:
12,...n N N N (下标n 代表有n 个不同评价对象。)
准则层:1,2,n C C C
设要比较各准则1,2,n C C C 对目标O 的重要性
:i j ij C C a ? 1(),0,ij n n ij ji ij
A a a a a ?=>= 要由A 确定1,2,n C C C 对O 的权向量。
考察完全一致的情况:
12(1),,n W w w w =? /ij i j a w w =令12(,,)~T n w w w w = 权向量
11
112
22
21212n n n n n n w w w w w w w w w w w w A w w w w w w ??????
????=????????????
n 阶一致阵的唯一非零特征根为n 。
求解公式: Aw w λ=
对应的权向量(特征向量):[]1
2T
n w w w w =
记第2层(准则层)对第1层(目标层)的权向量为:(2)
(2)(2)1(,,)T
n w
w w =
因考虑完全一致的情况,故不需进行一致性检验。
同样求第3层(方案)对第2层每一元素(准则)的权向量。
(3)(3)(3)1(,,),1
,2,,T k k km w w w k n ==
构造矩阵:(3)(3)(3)
1[,,]n W w w =
则第3层对第1层的组合权向量
(3)(3)(2)w W w =*
建立物资供应点如何向灾区分配物资:
救灾物资分配就是将有限的救灾物资投入到应急救援最急需的地方,实现最优化配置问题。建立物资集散地与受灾区的距离矩阵,求解最短路径。
模型建立:
符号说明:
m:m 个物资供应点。 n :n 个受灾区。
(1,2,3,,)i a i m = :代表每个供应点有救灾物资。
(1,2,3)j b j n = :代表每个受灾点需要救援物资。
(1,2,3,;1,2,3)ij D i m j n == :物资供应点与受灾区之间的距离矩阵。 约束条件:
1
,1,2,3m
ij
j i X
b j n ===∑
1
,1,2,3m
ij i j X a i m ===∑
目标函数:
11
min()m n
ij ij i j S D X ===∑∑
目标函数S 表示:
合考虑物资供应点与受灾地区距离和灾区物资需求,在满足物资需求的情况下,按照最近邻分配,从而得到最优值S,得到的ij X 就是供应点到灾区的物资分配情况。
问题2:
以汶川地震为例,选取八个灾区,它们分别是:成都市、德阳市、绵阳市、广元市、阿坝州、雅安市、眉山市、巴中市。评价指标选取受灾区距震中的距离、人口密度、受伤人数、死亡人数及经济发展程度,通过以上因素结合模糊综合评
判和层次分析求解受灾程度。
模糊综合评判
根据汶川地震的受灾情况,我们选取受灾区成都市、德阳市、绵阳市、广元市、阿坝州、雅安市、眉山市、巴中市作为方案层,分别用128,...N N N 表示;选取受灾区距震中的距离、人口密度、受伤人数、死亡人数及经济发展程度作为
评价指标,分别用125,,...,x x x 表示;权重向量为:(0.25,0.20,0.30,0.350.10)T W =-
,。
评价因素对应矩阵为:
101.7890.6427626413275084.9659.71707663967539.2101.6263.4219357795560.8235.8187.7478037072166.5139.010.2193342512987175.898.1281351148.9156.1423.510315280.8299.0309.010258146.1X ??
???
???
??
?
?
=???
??????
?
??
?
? 由公式Y XW
=
得
1.0e+004 *( 1.0456
2.7610 0.9331 1.4489 1.4623 0.0530 0.0209 0.0215)
Y =
归一化后
'
(0.1350 0.3564 0.1205 0.1870 0.1888 0.0068 0.0027 0.0028)
Y = 以上程序见附录一。
分配优化:
选取四川经济基础比较好的成都市、绵阳市、德阳市作为救援物资集结地点,将这三个地点的物资总量当做“1”,测出三个集结点距8个灾区的距离,根据归一化后的综合评价指标权重,运用目标规划模型 约束条件:
1
,1,2,3m
ij
j i X
b j n ===∑
1
,1,2,3m
ij
i j X
a i m ===∑
目标函数:
11
min()m n
ij ij i j S D X ===∑∑
求解供需分配矩阵ij X 。
下面使用lingo 进行线性规划求解供需矩阵ij X 。 用lingo 求解ij X ,程序见附录二,结果为:
Global optimal solution found.
Objective value: 90.21531 Infeasibilities: 0.5551115E-16
Total solver iterations: 11
VOLUME( Y1, Z1) 0.1350000 0.000000
VOLUME( Y1, Z2) 0.1164000 0.000000 VOLUME( Y1, Z3) 0.000000 1.900000 VOLUME( Y1, Z4) 0.9750000E-01 0.000000 VOLUME( Y1, Z5) 0.1888000 0.000000 VOLUME( Y1, Z6) 0.6800000E-02 0.000000 VOLUME( Y1, Z7) 0.2700000E-02 0.000000 VOLUME( Y1, Z8) 0.2800000E-02 0.000000 VOLUME( Y2, Z1) 0.000000 123.2000 VOLUME( Y2, Z2) 0.2400000 0.000000 VOLUME( Y2, Z3) 0.000000 2.300000 VOLUME( Y2, Z4) 0.000000 0.5000000 VOLUME( Y2, Z5) 0.000000 62.20000 VOLUME( Y2, Z6) 0.000000 166.1000 VOLUME( Y2, Z7) 0.000000 123.2000 VOLUME( Y2, Z8) 0.000000 9.000000 VOLUME( Y3, Z1) 0.000000 213.7000 VOLUME( Y3, Z2) 0.000000 90.90000 VOLUME( Y3, Z3) 0.1205000 0.000000 VOLUME( Y3, Z4) 0.8950000E-01 0.000000 VOLUME( Y3, Z5) 0.000000 120.3000 VOLUME( Y3, Z6) 0.000000 210.4000 VOLUME( Y3, Z7) 0.000000 213.9000 VOLUME( Y3, Z8) 0.000000 17.00000
供应点---受灾点---供应量柱状图
0.2
0.4
供应点
供应量
(matlab 柱状图作图程序见附录3。)
模糊综合判别距离矩阵—物资需求—供应量关系
层次分析法
根据汶川地震的受灾情况,我们选取受灾区成都市、德阳市、绵阳市、广元市、阿坝州、雅安市、眉山市、巴中市作为方案层,分别用128,...N N N 表示;
选取受灾区距震中的距离、人口密度、受伤人数、死亡人数及经济发展程度作为 评价指标,分别用1,2,n C C C 表示。
说明:求解方案层对准则层、准则层对目标层程序见附录4。
求得的准则层对目标层、方案层对准则层的一致性矩阵见附录5。
准则层对目标层权重
1-0.3693 -0.2639 -0.5278 -0.6862 -0.2111T
W ()
成都 德阳 绵阳 广元
阿坝
雅安 眉山 巴中 供应量 成都 0 61.6 107.8 260.3 222.5 125.2 66.2 288.9 0.55 德阳
61.6
0 46.6 199.2 223.1 229.7 127.8 236.3 0.24 绵阳 107.8
46.6
154.4 236.9
229.7
174.2
200.0
0.21
需求量 0.135 0.3564 0.1205 0.187 0.1888 0.0068 0.0027 0.0028
方案层对目标层权重
2W =
-0.2044 -0.7002 -0.1242 -0.3188 -0.0217 -0.1707 -0.5186 -0.4959 -0.7725 -0.1109 -0.2043 -0.2070 -0.6361 -0.0941 -0.1067 -0.4741 -0.1476 -0.1389 -0.4478 -0.3593 -0.2795 -0.0080 -0.5610 -0.3033 -0.6873 -0.3534 -0.0772 -0.0008 -0.0163 -0.4019 -0.3136 -0.3333 -0.0003 -0.0038 -0.2130 -0.6011 -0.2430 -0.0003 -0.0031 -0.4092 方案层对目标层权重
12
= 0.5491 1.0151 0.5529 0.6705 0.7546 0.2473 0.2515 0.3748T
W W W =* ()
W
归一化得
0.1243 0.2299 0.1252 0.1518 0.1709 0.0560 0.0570 0.0849T W = ()
分配优化:
同样选取四川经济基础比较好的成都市、绵阳市、德阳市作为救援物资集结地点,将这三个地点的物资总量当做“1”,测出三个集结点距8个灾区的距离,根据归一化后的综合评价指标权重,运用目标规划模型 约束条件:
1
,1,2,3m
ij
j i X
b j n ===∑
1
,1,2,3m
ij i j X a i m ===∑
目标函数:
11
min()m n
ij ij i j S D X ===∑∑
求解供需分配矩阵ij X 。
下面使用lingo 进行线性规划求解供需矩阵ij X 。
用lingo 求解ij X ,结果为:
Global optimal solution found.
Objective value: 103.2536 Infeasibilities: 0.5551115E-16
Total solver iterations: 12
VOLUME( Y1, Z1) 0.1243000 0.000000 VOLUME( Y1, Z2) 0.000000 0.5000000 VOLUME( Y1, Z3) 0.000000 1.900000 VOLUME( Y1, Z4) 0.5690000E-01 0.000000 VOLUME( Y1, Z5) 0.1709000 0.000000 VOLUME( Y1, Z6) 0.5600000E-01 0.000000 VOLUME( Y1, Z7) 0.5700000E-01 0.000000 VOLUME( Y1, Z8) 0.8490000E-01 0.000000 VOLUME( Y2, Z1) 0.000000 122.7000 VOLUME( Y2, Z2) 0.2299000 0.000000 VOLUME( Y2, Z3) 0.000000 1.800000 VOLUME( Y2, Z4) 0.1010000E-01 0.000000 VOLUME( Y2, Z5) 0.000000 61.70000 VOLUME( Y2, Z6) 0.000000 165.6000 VOLUME( Y2, Z7) 0.000000 122.7000 VOLUME( Y2, Z8) 0.000000 8.500000 VOLUME( Y3, Z1) 0.000000 213.7000 VOLUME( Y3, Z2) 0.000000 91.40000 VOLUME( Y3, Z3) 0.1252000 0.000000 VOLUME( Y3, Z4) 0.8480000E-01 0.000000 VOLUME( Y3, Z5) 0.000000 120.3000 VOLUME( Y3, Z6) 0.000000 210.4000 VOLUME( Y3, Z7) 0.000000 213.9000 VOLUME( Y3, Z8) 0.000000 17.00000
供应点---受灾点---供应量柱状图
0.2
0.4
供应点
供应量
层次分析法距离矩阵 物资需求 供应量关系
成都 德阳 绵阳 广元 阿坝 雅安 眉山 巴中 供应量 成都 0 61.6 107.8 260.3 222.5 125.2 66.2 288.9 0.55 德阳
61.6
0 46.6 199.2 223.1 229.7 127.8 236.3 0.24 绵阳 107.8
46.6
0 154.4 236.9 229.7 174.2
200
0.21
需求量 0.1243 0.2299 0.1252
0.1518
0.1709
0.056
0.057 0.0849
问题3
模型求解的准确程度很大一部分取决于受灾地区受灾情况数据的多少,及时,准确,要迅速搜集各种种类的灾害信息,及时反馈到决策中心,通过模型得到各个灾区的物资需求,安排不同的物资供应点调配物资供应受灾地区。
六、模型评价与改进
模型评价:
1、解决问题一时运用了两种模型,通过对比易知运用层次分析法的主观性相对
较小,在求解物资需求时层次分析法相对较好。
2、建立的目标函数S,是按照最近邻物资分配条件得到的,通过求解目标函数
S,达到求解物资供需的合理分配
不足与改进:
1、评估各个灾区物资需求量时,层次分析法较好,因为模糊综合评价在利用评
价指标的权重时主观性相对于层次分析法有更大的主观性,比较两种方法求得的最终结果可以看出,层次分析给出了更好的物资分配方式。
2、该模型考虑的灾害因素太少,增加考虑的因素可以更好的确定各个灾区的物
资需求,从而很好的把握好物资调配量,同时也能更好地安排供应点与灾区物资的调配,最大程度地减少受灾程度。
3、模型中简化了距离因素,考虑的是直线距离,实际情况并不是如此,即使是
空运也很难距离最短飞行,根据地形的不同,肯定会更复杂,道路曲折坎坷,道路受阻情况也十分普遍,这一点在实际求解模型时要给于考虑,使模型求解的结果更符合真实情况,也更趋合理。
4、现实过程当中,灾区信息根据时间的变化而变化,要建立一个动态物资分配
模型,时时调整决策。
七、参考文献
1、地震应急救援物资最优分配问题初探李晋, 袁志祥(陕西省地震局, 陕西西
安710068)
2、1.C++面向对象程序设计教程游洪跃清华大学出版社
3、数学建模与数学实验(第三版)赵静但琦高等教育出版社
4、MATLAB 7.0 实用教程张圣勤机械工业出版社
八、附录
附录1:
模糊综合评判测评判向量
cd G:\
load 0.txt;
w=[0.25 0.20 0.30 0.35 -0.10]';
data=X0;
sum=0;
for n=1:8
y(n)=data(n,:)*w;
sum=sum+y(n);
end
a=y'
sum m=y'/sum
附录2:
用lingo求解
X:
ij
(模糊综合评判求解物资分配)
model :
sets:
gongying/y1..y3/:capacity;
xuqiu/z1..z8/:demand;
links(gongying,xuqiu):volume,distance;
endsets
min=@sum(links:distance*volume);
@for(xuqiu(J):
@sum(gongying(I):volume(I,J))=demand(J));
@for(gongying(I):
@sum(xuqiu(J):volume(I,J))=capacity(I));
data :
capacity=0.55 0.24 0.21;
demand=0.135 0.3564 0.1205 0.187 0.1888 0.0068 0.0027 0.0028;
distance=0 61.6 107.8 260.3 222.5 125.2 66.2 288.9 61.6 0 46.6 199.2 223.1 229.7 127.8 236.3 107.8 46.6 0 154.4 236.9 229.7 174.2 200; enddata
end
附录3:
柱状图作图程序:
(模糊综合评判)
function zhuzhuangtu
b =[
0.135 0.1164 0 0.0975 0.1888 0.0068 0.0027 0.0028
0 0.24 0 0 0 0 0 0
0 0 0.1205 0.0895 0 0 0 0
];
bar3(b);
ylabel('供应点');
xlabel('受灾点');
zlabel('供应量');
附录4:
求一致矩阵程序:(方案层对准则层)
#include
#include
#include
using namespace std;
int main()
{
float b[8][5];
float a[8][8];
int i,j;
int n;
ifstream infile("1.txt");
if(infile.fail())
{
cout<<"da kai shi bai"< exit(1); } while(!infile.eof()) { for(i=0;i<8;i++) { for(j=0;j<5;j++) { infile>>b[i][j]; } } } infile.close(); ofstream outfile("2.txt"); if(outfile.fail()) { cout<<"da kai shi bai"< exit(2); } for(n=0;n<5;n++) { for(i=0;i<8;i++) { for(j=0;j<8;j++) { a[i][j]=b[i][n]/b[j][n]; } } for(i=0;i<8;i++) { for(j=0;j<8;j++) { outfile< cout< } outfile< } } outfile.close(); system("pause"); return 0; } 求一致矩阵(准则层对目标层) #include #include #include using namespace std; int main() { float b[5][1]; float a[5][5]; int i,j; ifstream infile("1.txt"); if(infile.fail()) { cout<<"da kai shi bai"< exit(1); } while(!infile.eof()) { for(i=0;i<5;i++) { for(j=0;j<1;j++) { infile>>b[i][j]; } } } infile.close(); ofstream outfile("2.txt"); if(outfile.fail()) { cout<<"da kai shi bai"< exit(2); } for(i=0;i<5;i++) { for(j=0;j<5;j++) { a[i][j]=b[i][0]/b[j][0]; } } for(i=0;i<5;i++) { for(j=0;j<5;j++) {