2014年认证杯SPSSPRO杯数学建模
D题 幼儿园园长的苦恼
原题再现:
某幼儿园,有 130 名孩子,有 15 名老师,由于园内的空间不足,为了让孩子们能够充分活动,需要将孩子们带到一块长 50 米,宽 35 米的矩形空地上去活动。每天大约要活动 30 分钟。在空地上活动是安全的,空地外可能会遇到危险。一名老师可以监督其正前方长 10m,宽 3m 的区域。
第一阶段问题: 如果你是该园的园长,如何调度现有的老师,才能最大限度的保证孩子的安全?
整体求解过程概述(摘要)
本文针对有限老师的最优分配问题,分离出了三个子问题。在综合考虑老师与学生人数、学生活动范围、老师学生运动能力和老师监管范围的前提下,搜集了可信数据;建立了三种监管能力预测模型;提出了最优分布准则;选出了最优方案。问题的分解与分步研究——由于我们把设置警戒区作为问题解决的基础,从而将问题分解为:对学生运动分布模式的研究、警戒区的设置和老师的分配安排,叁个部分。针对学生的运动分布模式,我们依据学生运动时间长,活动范围相对小的特点,结合不同人群的运动能力差异,通过布朗运动模型对学生三十分钟的运动及分布进行了预测,推算出,学生在每一区域内分布的数目、概率基本相当,由此我们认为:其运动接近随机运动,极大多数时间内是均匀分布的。
针对警戒区的设置,我们对老师、学生运动速度进行计算,结合老师监控范围的大小,对一维运动进行了几何推算,计算出老师能确保学生安全的监控区域大小,以此为依据,确定了边缘警戒区和中心安全区的范围。其次,我们引入了安全系数这一概念,并将警戒区占有率作为教师分布对安全系数贡献值计算的主要依据。针对老师的分配与安排,我们利用以上两个问题得到的结论,建立了叁个不同分配规则下教师的分配方案,以及安全系数贡献的预测模型。依据三个不同模型,按照不同的贡献率权重,分别输出它们各自的安全系数。通过对安全系数的比较,我们看到“守住边界,四角留出空白”的方案安全系数高达 9.775,因此,我们确信“守住边界,四角留出空白”为最优方案。
针对模型的评价,在上述方案中,预测的基础(学生运动分布模式的研究)存在统计误差,同时不可否认,预测模型本身也存在相对误差,故我们对模型的误差值、数据方差、标准差进行计算,得出误差对结论影响很小的结论。因此,本模型是合理可行的。针对模型的改进与推广,为了提高预测模型的精确程度,可完善三种方案作为改进与补充:一、加入教师位置固定而进行视线转动的预测模型;二、结合生理学对教师的监视效率衰减进行估计;三、将动态巡逻对安全系数贡献率的提高纳入考虑。在推广方面,本模型可用于解决森林防火、疫区防控等问题。
问题分析:
建立模型之前的数据收集与预处理
首先,我们对已有数据进行了分析。从空地面积与老师监视范围的比较中可以得知,老师无法保障所有区域都得到监控。又由于学生的活动时间长、人数多的特点,分析得出了学生运动不规则,分布均匀的结论。其次,我们意识到,模型的建立很可能与学生的运动情况及老师的运动能力有关。因此,我们收集了不同人群运动速度的数据,将成人(老师)、幼童(学生)的运动能力数据化,并进行了分析,得出了可信的结论。
建模的理念
第一,我们对问题进行分解,对各个部分进行了不同的分析,建立了预测模型,并得出结论。依据结论进行下一步的预测与问题解决。
第二,我们提出了三种不同的模型,得到了不同的量化结果。加入误差因素后,进行比较,得出最优方案。
第三,我们对方案进行了改进与推广。
模型假设:
为了更好地解决问题,我们经过分析,提出下列合理假设:
1. 每一个学生作为单独样本进行无规则运动。
2. 当学生进入警戒区,老师会立即发现与制止。
3. 老师对学生的制止是必定成功的。
4. 出于对学生的负责,老师 30 分钟内的监控效率保持一致。
论文缩略图:
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:(代码和文档not free)
function brouwn(x0,y0,xmin,xmax,ymin,ymax,n,step)
a = xmax - xmin ;
b = ymax - ymin ;
axis([xmin xmax ymin ymax]) ;
hold on ;
plot(x0,y0,'.') ;
for i = 1 : n
dx = step * a * (rand(1)-0.5) ;
dy = step * b * (rand(1)-0.5) ;
x1 = x0 + dx ;
y1 = y0 + dy ;
x1 = max(xmin,min(x1,xmax)) ;
y1 = max(ymin,min(y1,ymax)) ;
pause(0.1) ;
plot(x0,y0,'w.') ;
plot(x1,y1,'.') ;
x0 = x1 ;
y0 = y1 ;
end
clear;
X=[4.3,6.1,10.0,6.5,9.3,9.5;7.8,7.3,4.8,8.3,8.7,8.8;
3.2,4.2,5.4,8.6,7.2,11.4;6.5,4.1,9.6,8.2,10.1,7.8];
[p,tab,stats]=anova1(X,[ ],'on')
tab =
'Source' 'SS' 'df' 'MS' 'F' 'Prob>F'
'Columns' 55.5471 5 11.1094 3.5254 [0.0214]
'Error' 56.7225 18 3.1512 [] []
'Total' 112.2696 23 [] [] []
stats = gnames: [6x1 char] n: [4 4 4 4 4 4]
source: 'anova1'
means: [5.4500 5.4250 7.4500 7.9000 8.8250 9.3750]
df: 18