|
8 ?8 c, l" Y$ ?. H; P 2021五一杯数学建模B题消防救援问题
/ l; t5 X a. r, h. E% i7 p6 X+ d 消防救援问题 2 n5 y9 @: c* Z
随着我国经济的高速发展,城市空间环境复杂性急剧上升,各种事故灾害频发,安全风险不断增大,消防救援队承担的任务也呈现多样化、复杂化的趋势。对于每一起出警事件,消防救援队都会对其进行详细的记录。 : s% ]. L! P" k6 L$ {9 `- K& Y8 ?1 ~1 ]
某地有15个区域,分别用A、B、C…表示,各区域位置关系及距离如图1所示,各区域的人口及面积见附件1,该地消防救援队出警数据见附件2。
* d/ q( c4 f9 R 请依据该地的消防出警数据,建立数学模型,完成以下问题:
& y8 j- @' h* L/ E i1 f- ]6 y9 q 问题1:将每天分为三个时间段(0:00-8:00为时段Ⅰ,8:00-16:00为时段Ⅱ,16:00-24:00为时段Ⅲ),每个时间段安排不少于5人值班。假设消防队每天有30人可安排值班,请根据附件数据,建立数学模型确定消防队在每年2月、5月、8月、11月中第一天的三个时间段各应安排多少人值班。
, V/ N: n% p9 [# n* @" D 问题2:以该地2016年1月1日至2019年12月31日的数据为基础,以月份为单位,建立消防救援出警次数的预测模型;以2020年1月1日至2020年12月31日的数据作为模型的验证数据集,评价模型的准确性和稳定性,并对2021年各月份的消防救援出警次数进行预测,完成表1。 $ G C( E2 Z7 C; m' v |( R
问题3:依据7种类别事件的发生时间,建立各类事件发生次数与月份关系的多种数学模型,以拟合度最优为评价标准,确定每类事件发生次数的最优模型。
3 c y& x( H/ E6 F" v' \ 问题4:根据图1,请建立数学模型,分析该地区2016-2020年各类事件密度在空间上的相关性,并且给出不同区域相关性最强的事件类别(事件密度指每周每平方公里内的事件发生次数)。 + o i5 j% {: a
问题5:依据附件2,请建立数学模型,分析该地各类事件密度与人口密度之间的关系(人口密度指每平方公里内的人口数量)。
; N [9 V- ~" N. l" Y: J% d 问题6:目前该地有两个消防站,分别位于区域J和区域N,请依据附件1和附件2,综合考虑各种因素,建立数学模型,确定如果新建1个消防站,应该建在哪个区域?如果在2021-2029年每隔3年新建1个消防站,则应依次建在哪些区域? & }& p+ a/ H% W" [2 m' |$ O* n
* y8 b7 x* K/ s( ^; P: i2 p& n 问题分析:
9 {# z# U$ \7 ~% g* ] 针对问题 1,关于确定人数值班问题,首先筛选并统计出 2020 年、2019 年、 : t* n9 Y# m! M3 G2 U
2018 年、2017 年、2016 年的 2 月、5 月、8 月、11 月的第一天的三个时间段的出警次数,通过灰色预测方法得到每年的这 2 月、5 月、8 月、11 月这四个月第一天的三个时间段出警次数的预测数据。在对三个时间段各分配 5 人的基础上,根据每个
, ^* i6 c+ {: w# I/ E 月第一天的三个时间段对应的权重比例对剩余 15 人进行合理分配,计算出人员分配的人数。 R. r% T: |# p7 _7 V" z+ V5 e
针对问题 2,我们引入 ARIMA 预测模型,利用差分法对数据进行平稳性处理, 使得模型更加稳定和准确,对模型的检验我们采用平稳性 R 方与显著性检验。 5 k4 H, f) Z* w I0 Y+ x/ H; M
针对问题 3,我们选用了插值拟合和 ARIMA 两种模型,以此来建立各类事件发生次数与月份的关系。
! ~% {% G8 l x1 b* c; X5 T 针对问题 4,我们首先绘制散点图判断出各类事件在空间上具有相关性,为了直观表示各指标在不同区域之间的相关性,采用皮尔逊系数进行直观展示。
- n/ c! y; X& X; T! i, H 针对问题 5,我们首先绘制散点图判断出人口密度与事件具有线性关系,由此可以采用灰色关联模型进行分析。
; j' r D+ O* i" p2 i 针对问题 6,选择消防站需要考虑的因素最多的就是平均出警距离,所以在本问题中我们选择出警距离作为建立消防站的唯一评判因素。利用 Dijkstra 算法计算各区域之间的最短距离,计算在区域 J 和区域 N 以外的 13 个区域新增一个消防站后的平均出警距离,取新增后平均出警距离最小的区域作为建消防站的区域。
+ L; `+ u# W# C: S, ^' L ! E* M& N! H% Y$ _& e5 X' V. s
load 'xx.mat' n=length(y); yy=ones(n,1); " p7 M+ v1 I7 V! D
yy(1)=y(1);
" W3 ]3 B0 k* D# L% D for i=2:n
7 E7 | @( n* ? ?, E- b) j yy(i)=yy(i-1)+y(i) 7 S, A- c, m* d7 H, y
end " P- X; s" z& n" e$ Y5 G2 P- I# K! F
B=ones(n-1,2); ' W! T. j& E3 s Y
for i=1 n-1)
" c( Q" }7 u/ }9 V0 W6 t1 h8 z/ F B(i,1)=-(yy(i)+yy(i+1))/2; B(i,2)=1;
) x4 M- n( k j3 t, E6 Z$ F1 r end BT=B'; for j=1 n-1) 1 _! e6 t* i+ a: o
YN(j)=y(j+1); % H1 I( E0 K5 N: }) M! T
end YN=YN'; + }- F( W6 o" X. q5 {
A=inv(BT*B)*BT*YN; a=A(1); 1 a# l7 s }) J* @2 a2 J4 E
u=A(2); - j' H* a9 S( K; a' A
t=u/a;
1 y7 n4 e, G% R! \7 E t_test=input('输入需要预测的个数'); i=1:t_test+n;
! v! [( F2 }8 T3 q ^, [ yys(i+1)=(y(1)-t).*exp(-a.*i)+t; yys(1)=y(1); \% B) _1 V% ?+ w
for j=n+t_test:-1:2 ys(j)=yys(j)-yys(j-1); " ^3 s1 L8 @0 F
end x=1:n; " a% e$ R; M. ?' l3 s
xs=2:n+t_test; yn=ys(2:n+t_test);
( v* R( _3 g9 I; B% r& S+ C7 E. ^ plot(x,y,'^r',xs,yn,'*-b'); det=0;
# Q9 [! ?: M F# S for i=2:n
2 I7 x( g) Y0 v; h& A. k det=det+abs(yn(i)-y(i)); & O4 b% m/ ^* Z7 G1 L2 o; p! Y
end det=det/(n-1); 2 x1 ]- [( h8 V, `
disp(['百分绝对误差为:',num2str(det),'%']); & B% d- ~# ~/ M! S2 q7 I6 ^7 k" {
disp(['预测值为:',num2str(ys(n+1:n+t_test))]);
4 l9 {. `/ u5 [9 X/ V
' k% Y9 N4 f( f" Q }- f6 O4 B, r8 Y! ?; q- h0 X0 i& V/ U
, l ^7 X3 c/ K2 N1 q1 V
" T# Z; W; \ L z7 V |