|
" l' l8 u6 E% ~" [( p N! g
2021五一杯数学建模B题消防救援问题
( E" `; h: K4 ]/ X3 a1 t. \- o" m 消防救援问题
% r$ u" x5 Z x" R 随着我国经济的高速发展,城市空间环境复杂性急剧上升,各种事故灾害频发,安全风险不断增大,消防救援队承担的任务也呈现多样化、复杂化的趋势。对于每一起出警事件,消防救援队都会对其进行详细的记录。
3 J! a, T) Z6 f6 m* U2 | 某地有15个区域,分别用A、B、C…表示,各区域位置关系及距离如图1所示,各区域的人口及面积见附件1,该地消防救援队出警数据见附件2。
' C1 B* e. s7 A7 H 请依据该地的消防出警数据,建立数学模型,完成以下问题:
$ Y6 w4 |# h( z1 q9 |* V; F 问题1:将每天分为三个时间段(0:00-8:00为时段Ⅰ,8:00-16:00为时段Ⅱ,16:00-24:00为时段Ⅲ),每个时间段安排不少于5人值班。假设消防队每天有30人可安排值班,请根据附件数据,建立数学模型确定消防队在每年2月、5月、8月、11月中第一天的三个时间段各应安排多少人值班。 ' I, Q% L7 @* p+ u# w7 A7 i* m0 x! y/ a
问题2:以该地2016年1月1日至2019年12月31日的数据为基础,以月份为单位,建立消防救援出警次数的预测模型;以2020年1月1日至2020年12月31日的数据作为模型的验证数据集,评价模型的准确性和稳定性,并对2021年各月份的消防救援出警次数进行预测,完成表1。
: b* p) h! ?4 g6 X: y0 f& B- l0 T9 g 问题3:依据7种类别事件的发生时间,建立各类事件发生次数与月份关系的多种数学模型,以拟合度最优为评价标准,确定每类事件发生次数的最优模型。
: z6 h* J6 @, x0 C0 u" L) m 问题4:根据图1,请建立数学模型,分析该地区2016-2020年各类事件密度在空间上的相关性,并且给出不同区域相关性最强的事件类别(事件密度指每周每平方公里内的事件发生次数)。 Q3 Z$ L& m2 z7 o: `
问题5:依据附件2,请建立数学模型,分析该地各类事件密度与人口密度之间的关系(人口密度指每平方公里内的人口数量)。 1 h' }9 `$ Y* q+ R2 e6 v/ d
问题6:目前该地有两个消防站,分别位于区域J和区域N,请依据附件1和附件2,综合考虑各种因素,建立数学模型,确定如果新建1个消防站,应该建在哪个区域?如果在2021-2029年每隔3年新建1个消防站,则应依次建在哪些区域?
/ T% T8 F& C% ~: q+ B# F / G( H6 L1 u1 L
问题分析:
7 C/ I3 D' @# b% S, q 针对问题 1,关于确定人数值班问题,首先筛选并统计出 2020 年、2019 年、
* X, [$ @* {9 f6 n" C9 P7 W* W& z+ q 2018 年、2017 年、2016 年的 2 月、5 月、8 月、11 月的第一天的三个时间段的出警次数,通过灰色预测方法得到每年的这 2 月、5 月、8 月、11 月这四个月第一天的三个时间段出警次数的预测数据。在对三个时间段各分配 5 人的基础上,根据每个 $ g/ J0 ]; ]1 x; ~- b
月第一天的三个时间段对应的权重比例对剩余 15 人进行合理分配,计算出人员分配的人数。 + r u3 | `, Y
针对问题 2,我们引入 ARIMA 预测模型,利用差分法对数据进行平稳性处理, 使得模型更加稳定和准确,对模型的检验我们采用平稳性 R 方与显著性检验。
* h% k6 ?! p/ \) V% o6 c 针对问题 3,我们选用了插值拟合和 ARIMA 两种模型,以此来建立各类事件发生次数与月份的关系。
, ?0 J4 x* P( l0 n9 D. g% V( ? 针对问题 4,我们首先绘制散点图判断出各类事件在空间上具有相关性,为了直观表示各指标在不同区域之间的相关性,采用皮尔逊系数进行直观展示。
5 ^9 b) |0 F* `6 N3 E4 S 针对问题 5,我们首先绘制散点图判断出人口密度与事件具有线性关系,由此可以采用灰色关联模型进行分析。
% _0 e+ _, P0 b! T/ q4 \ 针对问题 6,选择消防站需要考虑的因素最多的就是平均出警距离,所以在本问题中我们选择出警距离作为建立消防站的唯一评判因素。利用 Dijkstra 算法计算各区域之间的最短距离,计算在区域 J 和区域 N 以外的 13 个区域新增一个消防站后的平均出警距离,取新增后平均出警距离最小的区域作为建消防站的区域。
5 P& i0 `" A4 y" ^$ W 8 k/ T: x+ {1 o1 i2 F2 r4 p X
load 'xx.mat' n=length(y); yy=ones(n,1); 1 y2 g% A- C, J6 m `1 a
yy(1)=y(1);
' g- ]& l4 O$ X' P for i=2:n 7 M" x+ t9 H/ H; I0 e
yy(i)=yy(i-1)+y(i)
1 [6 a' K( n' z+ ]/ J end
. [1 _$ D$ |: s x B=ones(n-1,2);
5 q+ A" V9 Q4 S# X: d" W for i=1 n-1)
6 z, I0 ^- @# [4 M* ] V# v6 ^ B(i,1)=-(yy(i)+yy(i+1))/2; B(i,2)=1; 9 R, I6 ]( p x3 g+ D3 d
end BT=B'; for j=1 n-1)
4 h7 j8 w3 ^5 |0 \, j YN(j)=y(j+1);
& E/ S6 E( o* G: J! l2 | end YN=YN';
& G( O n9 N& h# \% x. P7 k8 ` A=inv(BT*B)*BT*YN; a=A(1); 9 d, T# ^% g6 A% Z2 n8 o i, |% V
u=A(2);
2 L# @3 W! ?0 @/ R t=u/a;
, E V U7 P3 i, n1 h5 P2 g( E1 H t_test=input('输入需要预测的个数'); i=1:t_test+n;
* ]9 q! z! \, n6 K yys(i+1)=(y(1)-t).*exp(-a.*i)+t; yys(1)=y(1); , J1 m+ J0 ~( i+ T$ {+ \
for j=n+t_test:-1:2 ys(j)=yys(j)-yys(j-1);
+ g& F4 Q K' a8 { end x=1:n; / H: o9 v1 m# q- _& c
xs=2:n+t_test; yn=ys(2:n+t_test); 8 D2 @( b* C6 _% A
plot(x,y,'^r',xs,yn,'*-b'); det=0;
+ e$ ~8 N, e$ X2 _" q& I4 t for i=2:n
C+ P+ p1 X8 b3 {9 V$ f" D/ ~. H det=det+abs(yn(i)-y(i));
/ y; a2 V5 R# W" N9 b end det=det/(n-1); + B6 m3 g: K+ Q. f, \0 `' E" Z$ P- |
disp(['百分绝对误差为:',num2str(det),'%']);
" @/ ?2 _6 [% O! G" O0 R+ T disp(['预测值为:',num2str(ys(n+1:n+t_test))]); , o4 X3 B+ |; [7 ?) S# m i, L
# Z7 W" q, s5 m9 S- L7 w) r8 F
# O ~* O3 w8 d# n3 h7 `: `- D
+ }( a3 L4 W# T; O: @/ Z" _1 K4 E7 e1 |5 h8 }& A* |8 R
|