|
S: m4 o" r& S' s! c5 ?* M
2021五一杯数学建模B题消防救援问题
3 `. G; _) m4 p2 j( f4 n 消防救援问题 & Q$ {7 b: C i8 I& | D% {1 D1 |% y
随着我国经济的高速发展,城市空间环境复杂性急剧上升,各种事故灾害频发,安全风险不断增大,消防救援队承担的任务也呈现多样化、复杂化的趋势。对于每一起出警事件,消防救援队都会对其进行详细的记录。
' f) Z0 S" v) r7 f- Q 某地有15个区域,分别用A、B、C…表示,各区域位置关系及距离如图1所示,各区域的人口及面积见附件1,该地消防救援队出警数据见附件2。 ) L! Y6 R/ n6 A6 X- K
请依据该地的消防出警数据,建立数学模型,完成以下问题: 0 j& M! R; N% [8 _* a; J
问题1:将每天分为三个时间段(0:00-8:00为时段Ⅰ,8:00-16:00为时段Ⅱ,16:00-24:00为时段Ⅲ),每个时间段安排不少于5人值班。假设消防队每天有30人可安排值班,请根据附件数据,建立数学模型确定消防队在每年2月、5月、8月、11月中第一天的三个时间段各应安排多少人值班。
+ F6 | H Z- S7 N+ Z+ I 问题2:以该地2016年1月1日至2019年12月31日的数据为基础,以月份为单位,建立消防救援出警次数的预测模型;以2020年1月1日至2020年12月31日的数据作为模型的验证数据集,评价模型的准确性和稳定性,并对2021年各月份的消防救援出警次数进行预测,完成表1。
$ }. {# a: H" B* G i$ j) T, w 问题3:依据7种类别事件的发生时间,建立各类事件发生次数与月份关系的多种数学模型,以拟合度最优为评价标准,确定每类事件发生次数的最优模型。 ' t7 K9 b$ \1 K4 \" W' M2 X
问题4:根据图1,请建立数学模型,分析该地区2016-2020年各类事件密度在空间上的相关性,并且给出不同区域相关性最强的事件类别(事件密度指每周每平方公里内的事件发生次数)。
" {6 l5 p$ \1 H4 C7 b1 d$ ? 问题5:依据附件2,请建立数学模型,分析该地各类事件密度与人口密度之间的关系(人口密度指每平方公里内的人口数量)。
5 _8 o" F0 y/ H! c3 }6 @9 W8 n 问题6:目前该地有两个消防站,分别位于区域J和区域N,请依据附件1和附件2,综合考虑各种因素,建立数学模型,确定如果新建1个消防站,应该建在哪个区域?如果在2021-2029年每隔3年新建1个消防站,则应依次建在哪些区域?
1 C: u- v# x2 d; G. g
( q; }8 M& Z- s m% E( ^1 M9 _3 w) D) z 问题分析: # g2 B# d$ S- h* }+ X/ q( A
针对问题 1,关于确定人数值班问题,首先筛选并统计出 2020 年、2019 年、 " [! }! f1 T# k. `9 f: [7 d
2018 年、2017 年、2016 年的 2 月、5 月、8 月、11 月的第一天的三个时间段的出警次数,通过灰色预测方法得到每年的这 2 月、5 月、8 月、11 月这四个月第一天的三个时间段出警次数的预测数据。在对三个时间段各分配 5 人的基础上,根据每个 ! W7 R4 i2 x& _
月第一天的三个时间段对应的权重比例对剩余 15 人进行合理分配,计算出人员分配的人数。
9 H0 W9 @5 P/ Z( o) t2 V) W 针对问题 2,我们引入 ARIMA 预测模型,利用差分法对数据进行平稳性处理, 使得模型更加稳定和准确,对模型的检验我们采用平稳性 R 方与显著性检验。
9 \8 V0 s8 L9 \. A( a 针对问题 3,我们选用了插值拟合和 ARIMA 两种模型,以此来建立各类事件发生次数与月份的关系。 2 h( S: M# _6 k( T! l
针对问题 4,我们首先绘制散点图判断出各类事件在空间上具有相关性,为了直观表示各指标在不同区域之间的相关性,采用皮尔逊系数进行直观展示。
. ^' o: P& f1 d( F. O$ O 针对问题 5,我们首先绘制散点图判断出人口密度与事件具有线性关系,由此可以采用灰色关联模型进行分析。 . l/ r Q! U. E/ N- V0 v
针对问题 6,选择消防站需要考虑的因素最多的就是平均出警距离,所以在本问题中我们选择出警距离作为建立消防站的唯一评判因素。利用 Dijkstra 算法计算各区域之间的最短距离,计算在区域 J 和区域 N 以外的 13 个区域新增一个消防站后的平均出警距离,取新增后平均出警距离最小的区域作为建消防站的区域。
* S- w0 _9 @6 E! m, w % Y& F" X. I7 [9 g" m* q
load 'xx.mat' n=length(y); yy=ones(n,1); . f! z4 B1 _" t
yy(1)=y(1);
7 _2 t7 L2 H- ?/ n& c3 f: [ for i=2:n
& o1 ^+ K( f5 j* } yy(i)=yy(i-1)+y(i)
( q+ L. o! d7 ?9 O0 T4 N end
+ T, B- ]' c9 s. Q B=ones(n-1,2);
1 X; L5 s. u$ {& X8 p for i=1 n-1) ; K( u4 G( q2 `& r# z* E, B, v
B(i,1)=-(yy(i)+yy(i+1))/2; B(i,2)=1; # ?' x6 Q7 [! V7 d& `5 Q
end BT=B'; for j=1 n-1)
8 o) i) O9 o2 c0 Q( A( D7 r8 |( | b YN(j)=y(j+1);
8 U! t% Z3 F5 Y7 G5 ]1 k end YN=YN';
0 L7 a$ L$ l2 _$ b# n! U+ { A=inv(BT*B)*BT*YN; a=A(1);
- A' {4 ]% x* i- \& q+ E) i u=A(2); / M6 R- M1 |2 }( {' T; ~& a" D
t=u/a; ! Z* I$ t2 _* Z
t_test=input('输入需要预测的个数'); i=1:t_test+n; : n% w m; {7 E* X* D) r5 `' ^
yys(i+1)=(y(1)-t).*exp(-a.*i)+t; yys(1)=y(1);
* g9 `8 O' Z" U4 H& Z for j=n+t_test:-1:2 ys(j)=yys(j)-yys(j-1);
+ E& P3 {; v7 S3 A/ W f end x=1:n;
4 U# `6 b3 w9 m! o+ r xs=2:n+t_test; yn=ys(2:n+t_test); 5 v# a* L5 P( U! ?
plot(x,y,'^r',xs,yn,'*-b'); det=0;
0 z" V1 ?4 x+ F( V for i=2:n
+ L. l6 D4 C ?# Y1 ?6 R# ] det=det+abs(yn(i)-y(i)); , A; B# p% s5 N. x: W9 l
end det=det/(n-1); 8 y/ P0 E. ~: b, H
disp(['百分绝对误差为:',num2str(det),'%']);
2 X9 p4 S% t3 s6 K6 M- |7 ? disp(['预测值为:',num2str(ys(n+1:n+t_test))]); . m) M/ N- _; P3 c6 S5 n/ |2 x! x
4 T1 |% Q4 V" p% c! ~5 B6 e1 v
5 [6 J" ^$ e0 x4 Q( s' Y5 I) V# @
/ @+ ?. H/ Q+ t) g6 b |