2021华为杯数学建模B题完整思路+部分代码

问题 1. 使用附件 1 中的数据,按照附录中的方法计算监测点 A 从 2020 年 8 月
25 日到 8 月 28 日每天实测的 AQI 和首要污染物,将结果按照附录“AQI 计算结
果表”的格式放在正文中。
问题一就是单纯的计算问题,在附录中相关的计算规则都已经告知了,因此直接
带入数据进行计算即可,但需要注意各种逻辑关系,先捋顺在去计算。注意如果
计算结果过长就只选择部分代表性数据放在正文中即可,其它的部分放在附录
里。
问题 2. 在污染物排放情况不变的条件下,某一地区的气象条件有利于污染物扩
散或沉降时,该地区的 AQI 会下降,反之会上升。使用附件 1 中的数据,根据
对污染物浓度的影响程度,对气象条件进行合理分类,并阐述各类气象条件的特
征。
针对问题二,根据附件一可知,仅告诉我们检测点 A 的各类实测污染物数据,
但并未告知气象情况,因此我们首先根据问题一计算得到的 AQI 数据以及相关
的污染物数据进行无监督聚类,无监督聚类模型有很多,如层次聚类、高斯混合
聚类等,在这里比较推荐 SOM 自组织神经网络聚类算法,将原始数据输入网络
后能够自动根据各类数据的特点在不同的步数下生成不同的结果,如将 31 个省
市的 GDP 数据输入网络则会自动对发达程度进行聚类;
% 二维自组织特征映射网络设计
% 输入数据为各类实测污染物数据
clc
clear
close all
%---------------------------------------------------
%随机生成 100 个二维向量,作为样本,并绘制出其分布
P=[此处填写污染物数据]
%
%建立网络,得到初始权值
net=newsom([0 1;0 1],[5 6]);
w1_init=net.iw{1,1};
%---------------------------------------------------
%绘制出初始权值分布图
figure(2);
plotsom(w1_init,net.layers{1}.distances)
%---------------------------------------------------
%分别对不同的步长,训练网络,绘制出相应的权值分布图
for i=10:30:100
net.trainParam.epochs=i;
net=train(net,P);
figure(3);
plotsom(net.iw{1,1},net.layers{1}.distances)
end
%---------------------------------------------------
问题 3. 使用附件 1、2 中的数据,建立一个同时适用于 A、B、C 三个监测点(监
测点两两间直线距离>100km,忽略相互影响)的二次预报数学模型,用来预测
未来三天 6 种常规污染物单日浓度值,要求二次预报模型预测结果中 AQI 预报
值的最大相对误差应尽量小,且首要污染物预测准确度尽量高。并使用该模型预
测监测点 A、B、C 在 2021 年 7 月 13 日至 7 月 15 日 6 种常规污染物的单日浓度
值,计算相应的 AQI 和首要污染物,将结果依照附录“污染物浓度及 AQI 预测
结果表”的格式放在论文中。
首先分析题目已知数据包括了各监测点逐小时污染物浓度和气象一次预报数据
以及实测的污染物浓度和气象数据等;这里就是利用实测数据对预报数据进行误
差修正,既然是预测,那实测数据在未来肯定是无法得到的,所以思路就是通过
前期的预测数据和实测数据的差,找到相关的误差修正规律即可;因此在这里推
荐的模型是神经网络模型,具体是设置一个三层的网络机构,输入层数据是一次
预报的气象条件,而标准输出数据为真实污染物浓度与预测污染物浓度的差值,
这样就建立了预测气象条件与实际污染物浓度误差之间的关系;在这里推荐使用
基于遗传算法优化的神经网络模型,相对于传统的 BP 神经网络而言,其精度将
会更高。得到上述网络关系后,若新得到一组一次预报气象数据结合相关的误差
变量进行二次修正即可。
%程序一:GA 训练 BP 权值的主函数
function net=GABPNET(XX,YY)
%--------------------------------------------------------------------------
% GABPNET.m
% 使用遗传算法对 BP 网络权值阈值进行优化,再用 BP 算法训练网络
%--------------------------------------------------------------------------
%数据归一化预处理
nntwarn off
XX=[1:19;2:20;3:21;4:22]’;
YY=[1:4];
XX=premnmx(XX);
YY=premnmx(YY);
YY
%创建网络
net=newff(minmax(XX),[19,25,1],{‘tansig’,‘tansig’,‘purelin’},‘trainlm’);
%下面使用遗传算法对网络进行优化
P=XX;
T=YY;
R=size(P,1);
S2=size(T,1);
S1=25;%隐含层节点数
S=RS1+S1S2+S1+S2;%遗传算法编码长度
aa=ones(S,1)[-1,1];
popu=50;%种群规模
save data2 XX YY % 是将 xx,yy 二个变数的数值存入 data2 这个 MAT-file,
initPpp=initializega(popu,aa,‘gabpEval’);%初始化种群
gen=100;%遗传代数
%下面调用 gaot 工具箱,其中目标函数定义为 gabpEval
[x,endPop,bPop,trace]=ga(aa,‘gabpEval’,[],initPpp,[1e-6 1 1],‘maxGenTerm’,gen,…
‘normGeomSelect’,[0.09],[‘arithXover’],[2],‘nonUnifMutation’,[2 gen 3]);
%绘收敛曲线图
figure(1)
plot(trace(:,1),1./trace(:,3),‘r-’);
hold on
plot(trace(:,1),1./trace(:,2),‘b-’);
xlabel(‘Generation’);
ylabel(‘Sum-Squared Error’);
figure(2)
plot(trace(:,1),trace(:,3),‘r-’);
hold on
plot(trace(:,1),trace(:,2),‘b-’);
xlabel(‘Generation’);
ylabel(‘Fittness’);
%下面将初步得到的权值矩阵赋给尚未开始训练的 BP 网络
[W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x);
net.LW{2,1}=W1;
net.LW{3,2}=W2;
net.b{2,1}=B1;
net.b{3,1}=B2;
XX=P;
YY=T;
%设置训练参数
net.trainParam.show=1;
net.trainParam.lr=1;
net.trainParam.epochs=50;
net.trainParam.goal=0.001;
%训练网络
net=train(net,XX,YY);
%程序二:适应值函数
function [sol, val] = gabpEval(sol,options)
% val - the fittness of this individual
% sol - the individual, returned to allow for Lamarckian evolution
% options - [current_generation]
load data2
nntwarn off
XX=premnmx(XX);
YY=premnmx(YY);
P=XX;
T=YY;
R=size(P,1);
S2=size(T,1);
S1=25;%隐含层节点数
S=R
S1+S1S2+S1+S2;%遗传算法编码长度
for i=1:S,
x(i)=sol(i);
end;
[W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x);
%程序三:编解码函数
function [W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x)
load data2
nntwarn off
XX=premnmx(XX);
YY=premnmx(YY);
P=XX;
T=YY;
R=size(P,1);
S2=size(T,1);
S1=25;%隐含层节点数
S=R
S1+S1S2+S1+S2;%遗传算法编码长度
% 前 R
S1 个编码为 W1
for i=1:S1,
for k=1:R,
W1(i,k)=x(R*(i-1)+k);
end
end
% 接着的 S1S2 个编码(即第 RS1 个后的编码)为 W2
for i=1:S2,
for k=1:S1,
W2(i,k)=x(S1*(i-1)+k+RS1);
end
end
% 接着的 S1 个编码(即第 R
S1+S1S2 个后的编码)为 B1
for i=1:S1,
B1(i,1)=x((R
S1+S1S2)+i);
end
% 接着的 S2 个编码(即第 R
S1+S1S2+S1 个后的编码)为 B2
for i=1:S2,
B2(i,1)=x((R
S1+S1S2+S1)+i);
end
% 计算 S1 与 S2 层的输出
A1=tansig(W1
P,B1);
A2=purelin(W2*A1,B2);
% 计算误差平方和
SE=sumsqr(T-A2);
val=1/SE; % 遗传算法的适应值
问题 4. 相邻区域的污染物浓度往往具有一定的相关性,区域协同预报可能会提
升空气质量预报的准确度。如图 4,监测点 A 的临近区域内存在监测点 A1、A2、
A3,使用附件 1、3 中的数据,建立包含 A、A1、A2、A3 四个监测点的协同预
报模型,要求二次模型预测结果中 AQI 预报值的最大相对误差应尽量小,且首
要污染物预测准确度尽量高。使用该模型预测监测点 A、A1、A2、A3 在 2021
年 7 月 13 日至 7 月 15 日 6 种常规污染物的单日浓度值,计算相应的 AQI 和首
要污染物,将结果依照附录“污染物浓度及 AQI 预测结果表”的格式放在论文
中。并讨论:与问题 3 的模型相比,协同预报模型能否提升针对监测点 A 的污
染物浓度预报准确度?说明原因。
区域协同预报主要是为了防止某个点的预测数据存在误差的情况下,可通过其它
点的预测数据进行修正(修正的前提是利用其它点得到的相关数据与真实数据存
在较大的误差,则此时会进行修正)因此可首先基于真实数据建立 A、A1、A2、
A3 四个站点间与位置、污染物浓度数据有关的拟合模型,然后在将该拟合模型
之间的关系带入到一次预报数据中,若一次预报数据与拟合得到的结果差距较大
则将其替代(可设置一定的误差界限)若一致则保留,此时在利用问题三构建的
模型进行计算,看与真实值的误差是否减小,若减小则表示区域协同预报可以提
高准确度,若并未减小则表示效果不好。

交流群:912166339,非伸手党群

你可能感兴趣的:(数学建模小白到精通系列,华为,机器学习,数学建模)