2023 “华为杯” 中国研究生数学建模竞赛(F题)深度剖析|数学建模完整代码+建模过程全解全析

F题代码+思路

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2021年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。
让我们一起看看研赛的F题呀!全文都已放出哦~

问题重述

1.如何利用双偏振雷达的数据有效改进强对流降水的短临预报?要求建立可以提取双偏振雷达数据中的微物理特征信息的模型,进行0-1小时的降水预报。
2.当前一些数据驱动模型存在“回归到均值”的问题,生成的强降水预报往往过于模糊。要求在问题1的基础上,设计模型以生成更真实、更丰富细节的降水预报结果。
3.要求利用雷达反射率Z_H和差分反射率Z_DR,建立模型进行定量降水估计,即利用这两个变量预测降水量。
4.要求设计模型来评估双偏振雷达数据对强降水预报的贡献,并通过优化数据融合策略,与其他数据源集成,以提高强降水检测与预报的准确性。
在这里插入图片描述

问题一

1.输入输出设计
输入: X = X t − 9 , . . . , X t X=Xt−9 ,...,Xt X=Xt9,...,Xt
其中 X t ∈ R H × W × C Xt ∈RH×W×C XtRH×W×C表示时刻t的雷达图像,H、W为高度和宽度,C为通道数。
输出: Y = Y t + 1 , . . . , Y t + 10 Y^=Y^t+1,...,Y^t+10 Y=Yt+1,...,Yt+10
其中 Y t ∈ R H × W Y^t ∈RH×W YtRH×W表示时刻t的预测 Z H Z_H ZH
2.卷积特征提取
使用卷积层提取输入的局部特征: F = f ( [ X ; Θ f ] F=f([X;Θf ] F=f([X;Θf])
其中f表示卷积运算, Θ f \Theta_f Θf为卷积层参数。
3.卷积LSTM建模时空相关性

4.转置卷积上采样
Y = f T ( [ H ; Θ T ] ) Y^=fT([H;ΘT ]) Y=fT([H;ΘT])
其中 f T f^T fT表示转置卷积,H为卷积LSTM输出特征, Θ T \Theta_{T} ΘT为转置卷积参数。
5.损失函数设计

代码:

import tensorflow as tf
from tensorflow.keras.layers import ConvLSTM2D, Conv2D, Conv2DTranspose# 输入层
inputs = tf.keras.Input(shape=(10, 128, 128, 3)) # 卷积层提取特征
x = Conv2D(filters=64, kernel_size=3, activation='relu')(inputs)
x = MaxPooling2D((2, 2))(x)
from tensorflow.keras.layers import ConvLSTM2D, Conv2D, Conv2DTranspose, Attention
from tensorflow.keras import Modelinputs = Input(shape=(10, 128, 128, 3))# 第一层卷积
x = Conv2D(64, 3, padding='same', activation='relu')(inputs)  # 第二层卷积
x = Conv2D(64, 3, padding='same', activation='relu')(x)# 第一层卷积LSTM 
x = ConvLSTM2D(64, 3, padding='same', return_sequences=True)(x)# 第二层卷积LSTM
x = ConvLSTM2D(64, 3, padding='same', return_sequences=True)(x)# 注意力机制# 利用一个Dense层学习注意力权重
attn_layer = Dense(units=64, activation='tanh')(x)  # 计算注意力权重
attn_weights = Dense(units=10, activation='softmax')(attn_layer)# 尺度注意力权重
attn_weights = Reshape((10, 1, 1, 1))(attn_weights) # 计算注意力输出
attn_output = Multiply()([x, attn_weights])# 转置卷积上采样 # 第1层转置卷积
x = Conv2DTranspose(filters=64, kernel_size=3, strides=2, padding='same')(attn_output)# 第2层转置卷积 
x = Conv2DTranspose(filters=32, kernel_size=3, strides=2, padding='same')(x)  # 第3层转置卷积
x = Conv2DTranspose(filters=1, kernel_size=3, strides=2, padding='same')(x)# 构建Model
model = Model(inputs, x)# 编译与训练
model.compile(loss='mae', optimizer='adam')
model.fit(X_train, y_train, epochs=10) # 预测
y_pred = model.predict(X_test)# 编译与训练
model.compile(loss='mae', optimizer='adam') 
model.fit(X_train, y_train, epochs=10)# 预测
y_pred = model.predict(X_test)

在这里插入图片描述

问题二

1.构建multi-scale的预报模型
在卷积LSTM模型中,同时预测不同尺度的Z_H:·低分辨率Z_H:反映大尺度的降水格局
·高分辨率Z_H:反映小尺度的降水细节2.加入先验约束
根据气象知识,加入对强降水的先验约束,例如:·强降水具有聚集性
·细胞运动遵循流场
·生命期分不同发展阶段
可以将这些先验知识以约束条件加入模型。
3.模型集成
使用多个不同的模型,对其各自的预报结果进行融合。
4.数据增强
通过旋转、翻转、添加噪声等来增强训练数据,提高模型的鲁棒性。
5.模型和训练策略优化
改进模型结构,调整损失函数,优化训练超参等。

from tensorflow.keras.layers import Input, ConvLSTM2D, UpSampling2D
from tensorflow.keras.models import Modelinputs = Input(shape=(10, 128, 128, 1))# 低分辨率预测分支x1 = ConvLSTM2D(filters=32, kernel_size=3, padding='same', return_sequences=True)(inputs)
x1 = BatchNormalization()(x1) # 加入BN层
x1 = ConvLSTM2D(filters=32, kernel_size=3, padding='same')(x1)  
x1 = Conv2D(filters=1, kernel_size=1, padding='same')(x1)# 高分辨率预测分支 x2 = ConvLSTM2D(filters=64, kernel_size=3, padding='same', return_sequences=True)(inputs)
x2 = BatchNormalization()(x2) 
x2 = ConvLSTM2D(filters=64, kernel_size=3, padding='same')(x2)
x2 = UpSampling2D(size=(2,2))(x2) # 双线性插值上采样 
x2 = Conv2D(filters=1, kernel_size=1, padding='same')(x2)# 合并不同尺度merged = Add()([x1, x2])  
merged = BatchNormalization()(merged) # BN层融合不同分支# 编译与训练
model.compile(loss='mse', optimizer='adam') 

在这里插入图片描述

问题三

思路:
1.输入输出设计
输入:雷达反射率 Z H Z_H ZH 和 差分反射率 Z D R Z_DR ZDR输出:预测降水量R
2.建立Z-R关系
R = a ∗ Z H b ∗ Z D R c R = a * Z_H^b * Z_DR^c R=aZHbZDRc其中a,b,c为经验参数。
将问题转换为确定这三个参数。
3.参数确定
收集观测数据:从多个地区和多种降水类型收集大量三元组数据(Z_H, Z_DR, R)。
数据预处理:去除误差较大的样本,检查数据质量。标准化Z_H和Z_DR。
拟合参数:构建损失函数 L = ∑ i = 1 N ( R ^ i − R i ) 2 L = ∑ i = 1 N ( R i − R i ) 2 \mathcal L=\sum_{i=1}^N(\hat R_i-R_i)^2L=∑i=1N (R^i −Ri )2 L=i=1N(R^iRi)2L=i=1N(RiRi)2,其中 R ^ i = a Z H i b Z D R i c R i = a Z H i b Z D R i c \hat R_i=aZ_{H_i}^bZ_{DR_i}^cR^i =aZHi b ZDRi c R^i=aZHibZDRicRi=aZHibZDRic 。使用梯度下降算法学习参数a,b,c以最小化损失函数。
4.模型选择:比较不同的幂指数组合,选择拟合效果最佳的一组参数。模型检验
收集独立测试数据:保证训练数据和测试数据的地区和降水类型有所不同。
测试集预测:将测试数据Z_H和Z_DR代入学到的Z-R关系,生成降水预测 R ^ \hat R R^
评估指标:计算RMSE、MAE等检验预测效果。绘制散点图比较 R ^ \hat R R^和R。
模型改进:比较不同区域和降水类型的预测效果,分析原因,进一步优化模型。
极端情况验证:使用极端降雨情况下的数据验证模型的适用范围和稳健性。
在这里插入图片描述

代码:

import numpy as np
from sklearn.metrics import mean_squared_error# 收集并预处理观测数据
zh = [12, 15, 13, ...] # 反射率因子Z_H
zdr = [0.8, 1.2, 0.7, ...] # 差分反射率Z_DR
r = [10, 25, 12, ...] # 实测降水量R# 定义Z-R关系,初始化参数  
def zr_relation(zh, zdr, a, b, c):return a * zh**b * zdr**c# 使用最小二乘法拟合参数
def train(zh, zdr, r, a, b, c):preds = [zr_relation(z, zd, a, b, c) for z,zd in zip(zh, zdr)]  loss = mean_squared_error(r, preds)# 参数初始化
a, b, c = 0.01, 1.4, 0.9  # 梯度下降函数
def grad_descent(zh, zdr, r, a, b, c, lr=0.01, epochs=100):for i in range(epochs):# 计算损失函数  preds = [zr_relation(z, zd, a, b, c) for z, zd in zip(zh, zdr)]loss = np.mean((preds - r)**2)# 计算梯度a_grad = 2 * np.mean((preds - r) * preds * (a ** (b-1)) * (c ** (c-1)))b_grad = 2 * np.mean((preds - r) * preds * (np.log(z) * a ** b * (c ** c)))c_grad = 2 * np.mean((preds - r) * preds * (np.log(zd) * a ** b * (c ** (c-1))))# 参数更新  a = a - lr * a_gradb = b - lr * b_grad c = c - lr * c_gradreturn a, b, c# 拟合参数
a, b, c = grad_descent(zh, zdr, r, a, b, c)# 模型评估
zh_test, zdr_test, r_test = ... # 测试数据
preds_test = [zr_relation(z, zd, a, b, c) for z, zd in 

在这里插入图片描述

梯度下降函数

问题四

  1. 基准模型

Y ^ 0 = f ( X 0 ; θ 0 ) \hat{Y}_0 = f(X_0; \theta_0) Y^0=f(X0;θ0)

其中 X 0 X_0 X0为单偏振Z_H, θ 0 \theta_0 θ0为模型参数, Y ^ 0 \hat{Y}_0 Y^0为预测。

  1. 评估模型

Y ^ 1 = f ( X 1 ; θ 1 ) \hat{Y}_1 = f(X_1; \theta_1) Y^1=f(X1;θ1)

其中 X 1 X_1 X1包含Z_H、Z_DR、K_DP, θ 1 \theta_1 θ1为参数, Y ^ 1 \hat{Y}_1 Y^1为预测。

  1. 模型评估

R M S E 0 = 1 n ∑ i = 1 n ( Y i − Y ^ 0 i ) 2 RMSE_0 = \frac{1}{n}\sum_{i=1}^{n}(Y_i - \hat{Y}_{0i})^2 RMSE0=n1i=1n(YiY^0i)2

R M S E 1 = 1 n ∑ i = 1 n ( Y i − Y ^ 1 i ) 2 RMSE_1 = \frac{1}{n}\sum_{i=1}^{n}(Y_i - \hat{Y}_{1i})^2 RMSE1=n1i=1n(YiY^1i)2

比较 R M S E 0 RMSE_0 RMSE0 R M S E 1 RMSE_1 RMSE1

  1. 注意力机制融合

Y ^ = ∑ i = 1 m α i f i ( X i ; θ i ) \hat{Y} = \sum_{i=1}^{m}\alpha_i f_i(X_i; \theta_i) Y^=i=1mαifi(Xi;θi)

学习权重 α i \alpha_i αi,自适应地融合不同数据源 X i X_i Xi的预测。

import tensorflow as tf
from tensorflow.keras import layers, models# 1. 构建基准模型 
inputs_zh = layers.Input(shape=(10, 64, 64, 1))
conv_zh = layers.Conv2D(32, 3)(inputs_zh)
lstm_zh = layers.LSTM(32)(conv_zh)
outputs_zh = layers.Dense(64*64)(lstm_zh)
base_model = models.Model(inputs_zh, outputs_zh)# 2. 构建增强模型
inputs_dual_pol = layers.Input(shape=(10, 64, 64, 3))  
conv_dual_pol = layers.Conv2D(32, 3)(inputs_dual_pol)
lstm_dual_pol = layers.LSTM(32)(conv_dual_pol)
outputs_dual_pol = layers.Dense(64*64)(lstm_dual_pol)
enhanced_model = models.Model(inputs_dual_pol, outputs_dual_pol)# 3. 模型训练
# 载入数据
X_train, X_test = load_data()  # 数据预处理
X_train = normalize(X_train)
X_test = normalize(X_test)

更多完整版看这里:
(5 封私信 / 2 条消息) 如何评价2023数学建模研赛F题? - csdn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】离线Ubuntu20.04+mysql 5.7.36 + xtrabackup定时增量备份脚本

一、环境 ● Ubuntu版本查看 lsb_release -a● mysql 版本查看 mysql --version我的是ubuntu 20.04,mysql是5.7.36,所以要用 install_percona-xtrabackup-24 二、原理 备份 通过ubuntu自带的定时器运行增量备份脚本备份文件可以存储在映射后的其他…

23 mysql index 查询

前言 这里主要是 探究一下 explain $sql 中各个 type 诸如 const, ref, range, index, all 的查询的影响, 以及一个初步的效率的判断 这里会调试源码来看一下 各个类型的查询 需要 lookUp 的记录 以及 相关的差异 此系列文章建议从 mysql const 查询 开始看 测试表结构…

Linux学习第22天:Linux中断驱动开发(一): 突如其来

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 中断作为驱动开发中很重要的一个概念,在实际的项目实践中经常用到。本节的主要内容包括中断简介、硬件原理分析、驱动程序开发及运行测试。其中驱动程…

【用unity实现100个游戏之13】复刻类泰瑞利亚生存建造游戏——包括建造系统和库存系统

文章目录 前言素材人物瓦片其他 一、建造系统1. 定义物品类2. 绘制地图3. 实现瓦片选中效果4. 限制瓦片选择5. 放置物品功能6. 清除物品7. 生成和拾取物品功能 二、库存系统1. 简单绘制UI2. 零代码控制背包的开启关闭3. 实现物品的拖拽拖拽功能拖拽恢复问题 4. 拖拽放置物品5. …

FastestDet---模型训练

代码:https://github.com/dog-qiuqiu/FastestDet 一、构造数据集 数据集格式YOLO相同,每张图片对应一个txt标签文件。标签格式:“category cx cy wh”,category为类别id,cx, cy为归一化标签框中心点的坐标,w, h为归一化标签框的宽度和高度, .txt标签文件内容示例如下: 0…

c++迷宫小游戏

一、总结 一句话总结: 显示:根据map数组输出图像 走动:修改map数组的值,每走一步重新刷新一下图像就好 1、如果走函数用z(),出现输入s会向下走多步的情况,原因是什么? 向下走两层循环ij增加&a…

云中网络的隔离GREVXLAN

底层的物理网络设备组成的网络我们称为 Underlay 网络,而用于虚拟机和云中的这些技术组成的网络称为 Overlay 网络,这是一种基于物理网络的虚拟化网络实现。 第一个技术是 GRE,全称 Generic Routing Encapsulation,它是一种 IP-o…

深信服云桌面用户忘记密码后的处理

深信服云桌面用户忘记了密码,分两种情况,一个是忘记了登录深信服云桌面的密码,另外一个是忘记了进入操作系统的密码。 一、忘记了登录深信服云桌面的密码 登录虚拟桌面接入管理系统界面,在用户管理中选择用户后,点击后…

20分钟彻底理解Pointpillars论文-妥妥的

PointPillars: Fast Encoders for Object Detection from Point Clouds PointPillars:快就对了 摘要(可跳过): 这帮人提出了PointPillars,一种新颖的编码器,它利用PointNets来学习以垂直列组织的点云&am…

一个简单的工具,多种用途—J2L3x的优势

J2L3x 是一款流行的团队合作工具,许多组织和公司已经开始使用它来简化和提高沟通和协作的效率。J2L3x 的优势与其多种用途不无关系,下面将详细介绍。 1、实时通信与信息共享 J2L3x 通过实时通信功能,使团队成员随时随地都能保持联系。J2L3x…

Python 实现 PDF 文件转换为图片 / PaddleOCR

文章用于学习记录 文章目录 前言一、PDF 文件转换为图片二、OCR 图片文字识别提取三、服务器端下载运行 PaddleOCR四、下载权重文件总结 前言 文字识别(Optical Character Recognition,简称OCR)是指将图片、扫描件或PDF、OFD文档中的打印字符…

Flask扩展:简化开发的利器以及26个日常高效开发的第三方模块(库/插件)清单和特点总结

目录 寻找扩展 使用扩展 创建扩展 26个常用的Flask扩展模块 总结 原文:Flask扩展:简化开发的利器以及26个日常高效开发的第三方模块(库/插件)清单和特点总结 (qq.com) Flask是一个轻量级的Python Web框架,它提供…

【计算机网络】互联网公司的网络架构和业务场景

互联网公司的网络架构和业务场景 1. 互联网公司网络的组成1.1 网络的物理组成1.2 骨干网组成1.3 数据中心网络组成 2.互联网公司网络服务场景2.1 通用服务场景2.1.1 客户端到服务端请求真实网络过程2.1.2 客户端到服务端请求抽象网络过程2.1.3 负载均衡网络模型 2.2 边缘服务场…

python学习之路

python 初识python下载python安装python安装成功 idea中配置python环境并运行我的idea是2022版和上一个有点区别VSCode搭建Python开发环境(含Python环境搭建) 学习python 初识python 当我了解python时我决定试一试 首先了解一下什么是python,推荐廖雪峰老师的官网 python简介 …

C语言连接MySQL并执行SQL语句(hello world)

1.新建一个控制台项目 参考【VS2022 和 VS2010 C语言控制台输出 Hello World】VS2022 和 VS2010 C语言控制台输出 Hello World_vs2022源文件在哪_西晋的no1的博客-CSDN博客 2.安装MySQL 参考【MySQL 8.0.34安装教程】MySQL 8.0.34安装教程_西晋的no1的博客-CSDN博客 3.复制MySQ…

sentinel-dashboard-1.8.0.jar开机自启动脚本

启动阿里巴巴的流控组件控制面板需要运行一个jar包,通常需要运行如下命令: java -server -Xms4G -Xmx4G -Dserver.port8080 -Dcsp.sentinel.dashboard.server127.0.0.1:8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.0.jar &…

m4a怎么转换mp3?4个方法包教包会

m4a怎么转换mp3?M4A是一种备受欢迎的音频文件格式,通常用于存储高保真音频数据。它代表着“MPEG-4 Audio”扩展名,这意味着它属于基于MPEG-4标准的音频格式之一。M4A格式有着众多的优势。首先,它能够提供出色的音质,并…

Sui主网升级至V1.10.1版本

升级要点 Sui协议版本升至:25 #13822 使用由仪式生成的验证密钥来验证zklogin交易中的证明,升级协议版本至25,启用JWK共识和3个OAuth提供商的zklogin标志。 #13422 在构建具有这些元素的Move代码时,可能会出现关于未使用常量…

中药材商城小程序的作用是什么

古往今来中药材的作用非常大,无论中医院还是相关药材作坊都会有大量人购买,随着互联网电商拓展更多商品类目,中药材也可以通过线上销售,让消费者随时购买到所需商品,商家也能获得更多生意。 那么通过【雨科】平台搭建中…

Python大数据之Python进阶(一)介绍

课程介绍 数据埋点本质上就是进行数据采集,数据埋点是对自身业务数据进行采集。要进行数据埋点就要了解我们的业务程序的开发流程,知道整个数据的传递过程,这样能让我们更加明确数据分析的业务需求,有利于数据埋点的准确性。 在…