2024年五一数学建模竞赛C题-煤矿深部开采冲击地压危险预测(助攻思路与代码、成品论文持续更新)
C题赛题
煤炭是中国的主要能源和重要的工业原料。然而,随着开采深度的增加,地应力增大,井下煤岩动力灾害风险越来越大,严重影响着煤矿的安全高效开采。在各类深部煤岩动力灾害事故中,冲击地压已成为威胁中国煤矿安全生产最重要的灾害之一,冲击地压事故易造成严重的人员伤亡和财产损失。近年来,研究人员进行了大量深入的研究,采取了许多防控措施,中国煤矿安全形势持续稳步改善。但是,冲击地压事故仍时有发生,煤矿安全形势依然严峻,冲击地压的监测预警和有效防控仍是煤矿安全生产中亟待解决的科技问题。在深部煤矿开采过程中,可以监测声发射(AE)和电磁辐射(EMR)信号,电磁辐射和声发射传感器每30秒采集一个数据,可通过这些数据的变化趋势判断目前工作面或巷道是否存在冲击地压危险。电磁辐射和声发射数据随着采煤工作面的推进波动,一般在冲击地压发生前数天(如0-7天,即大约冲击地压发生前7天内)会有一些趋势性前兆特征,因此我们将电磁辐射和声发射数据分为5类,(A)正常工作数据;(B)前兆特征数据;(C)干扰信号数据;(D)传感器断线数据;(E)工作面休息数据,其中,A、B、C 类为工作面正常生产时的数据,D类为监测系统不正常时的数据,E类为停产期间的数据。附件1给出了2019年1月9日-2020年1月7日采集的电磁辐射和声发射数据,并且标记出了所对应的A、B、C类以及D或者E类(D/E)数据。请建立数学模型,完成以下问题:
问题1:如图1,已知现场工作面的部分电磁辐射和声发射信号中存在大量干扰信号,有可能是工作面的其他作业或设备干扰等因素引起,这对后期的电磁辐射和声发射信号处理造成了一定的影响。应用附件1和2中的数据,完成以下问题。
(1.1) 建立数学模型,对存在干扰的电磁辐射和声发射信号进行分析,分别给出电磁辐射和声发射中的干扰信号数据的特征(不少于3个)。
(1.2) 利用问题(1.1)中得到的特征,建立数学模型,对2022年5月1日-2022年5月30日的电磁辐射和2022年4月1日-2022年5月30日及2022年10月10日-2022年11月10日声发射信号中的干扰信号所在的时间区间进行识别,分别给出电磁辐射和声发射最早发生的5个干扰信号所在的区间,完成表1和表2。
问题2:已知在发生冲击地压危险前约7天内,电磁辐射和声发射信号存在随时间循环增大的趋势(如图2所示),这类信号我们称为前兆特征信号。在出现前兆特征信号之后的约7天内,有可能发生冲击地压,所以一般情况下出现前兆特征信号之后,会采取一定措施尽可能的防止冲击地压发生。应用附件1和2中的数据,完成以下问题。
(2.1) 建立数学模型,对电磁辐射和声发射信号中的前兆特征信号进行分析,重点分析信号的变化趋势,分别给出电磁辐射和声发射信号危险发生前(前兆特征)数据的趋势特征(不少于3个)。
(2.2) 利用问题(2.1)中得到的特征,建立数学模型,对2020年4月8日-2020年6月8日及2021年11月20日-2021年12月20日的电磁辐射和2021年11月1日-2022年1月15日声发射信号中的前兆特征所在的时间区间进行识别,分别给出电磁辐射和声发射信号最早发生的5个前兆特征信号所在的时间区间,完成表3和表4。
问题3:为了尽早的识别前兆特征信号,在前兆特征信号出现的第一时间发出预警,需要在每次数据采集的时刻对危险进行预判。附件3给出了一些非连续时间段采集的电磁辐射和声发射信号数据。请建立数学模型,给出附件3中的每个时间段最后时刻出现前兆特征数据的概率,完成表5。
解题思路与代码
问题一:
(1.1) 建立数学模型,对存在干扰的电磁辐射和声发射信号进行分析,分别给出电磁辐射和声发射中的干扰信号数据的特征(不少于3个)。
(1.2) 利用问题(1.1)中得到的特征,建立数学模型,对2022年5月1日-2022年5月30日的电磁辐射和2022年4月1日-2022年5月30日及2022年10月10日-2022年11月10日声发射信号中的干扰信号所在的时间区间进行识别,分别给出电磁辐射和声发射最早发生的5个干扰信号所在的区间,完成表1和表2。
首先加载Excel文件中的数据,预处理这些数据,并绘制一张时间与电磁辐射值 (EMR) 变化的图表
import pandas as pd
import matplotlib.pyplot as plt
# 数据加载
def load_data(filepath):
return pd.read_excel(filepath)
# 数据预处理
def preprocess_data(data):
data['时间 (time)'] = pd.to_datetime(data['时间 (time)'])
return data
# 绘图函数,使用不同颜色绘制不同类别的数据
def plot_data(data):
plt.figure(figsize=(12, 6))
categories = data['类别 (class)'].unique()
colors = plt.cm.jet(np.linspace(0, 1, len(categories))) # 生成颜色数组
color_dict = dict(zip(categories, colors)) # 将类别与颜色对应
for category, color in color_dict.items():
category_data = data[data['类别 (class)'] == category]
plt.plot(category_data['时间 (time)'], category_data['电磁辐射 (EMR)'], label=f'Class {category}', color=color, marker='o', linestyle='-')
plt.xlabel('时间')
plt.ylabel('电磁辐射值 (EMR)')
plt.title('电磁辐射随时间的变化')
plt.legend()
plt.grid(True)
plt.show()
# 主函数
def main():
# 加载数据
data = load_data('附件1 (Attachment 1).xlsx')
# 数据预处理
processed_data = preprocess_data(data)
# 绘制数据图表
plot_data(processed_data)
if __name__ == "__main__":
main()
然后,提取特征,绘制电磁和声波信号的时域和频域表示,
# 特征提取
def extract_features(data):
features = {}
emr_values = data['电磁辐射 (EMR)'].to_numpy() # Convert to NumPy array for FFT
# 时间域特征
features['mean'] = np.mean(emr_values)
features['std_dev'] = np.std(emr_values)
features['max_value'] = np.max(emr_values)#B站UP主:white学长努力中
# 频域特征(取FFT的前几个点的实部)
fft_values = fft(emr_values)
features['fft1_real'] = np.real(fft_values[1])
features['fft2_real'] = np.real(fft_values[2])
features['fft3_real'] = np.real(fft_values[3])
return features
# 绘制时间域图
def plot_time_domain(data):
plt.figure(figsize=(12, 6))
plt.plot(data['时间 (time)'], data['电磁辐射 (EMR)'], label='EMR Data', marker='o')
plt.xlabel('时间')
plt.ylabel('电磁辐射值')#B站UP主:white学长努力中
plt.title('电磁辐射随时间变化')
plt.legend()
plt.grid(True)
plt.show()
# 绘制频域图
def plot_frequency_domain(data):
emr_values = data['电磁辐射 (EMR)'].to_numpy()
fft_values = fft(emr_values)
frequencies = np.linspace(0, len(fft_values)/2, num=len(fft_values)//2, endpoint=False)
magnitude = np.abs(fft_values[:len(fft_values)//2])
plt.figure(figsize=(12, 6))
plt.plot(frequencies, magnitude)
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度')
plt.title('电磁辐射的频域表示')#B站UP主:white学长努力中
plt.grid(True)
plt.xlim(0, 500)# 仅显示0-500Hz的频率范围
plt.show()
构建神经网络模型对数据集进行训练和预测,
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 构建神经网络模型
def build_model(input_dim):
model = Sequential([
Dense(64, activation='relu', input_dim=input_dim),
Dense(64, activation='relu'),
Dense(len(class_names), activation='softmax') # 使用softmax确保输出可以解释为概率
])
#B站UP主:white学长努力中
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
return model
# 构建模型
model = build_model(X_train.shape[1])
# 训练模型
history = model.fit(X_train, y_train, epochs=20, batch_size=32, validation_split=0.2)
# 评估模型
test_loss, test_acc = model.evaluate(X_test, y_test)
print("Test Accuracy:", test_acc)
问题二:
(2.1) 建立数学模型,对电磁辐射和声发射信号中的前兆特征信号进行分析,重点分析信号的变化趋势,分别给出电磁辐射和声发射信号危险发生前(前兆特征)数据的趋势特征(不少于3个)。
(2.2) 利用问题(2.1)中得到的特征,建立数学模型,对2020年4月8日-2020年6月8日及2021年11月20日-2021年12月20日的电磁辐射和2021年11月1日-2022年1月15日声发射信号中的前兆特征所在的时间区间进行识别,分别给出电磁辐射和声发射信号最早发生的5个前兆特征信号所在的时间区间,完成表3和表4。
代码更新中...
问题三:
为了尽早的识别前兆特征信号,在前兆特征信号出现的第一时间发出预警,需要在每次数据采集的时刻对危险进行预判。附件3给出了一些非连续时间段采集的电磁辐射和声发射信号数据。请建立数学模型,给出附件3中的每个时间段最后时刻出现前兆特征数据的概率,完成表5。
代码更新中...
代码获取方式
2024五一建模C题目代码+论文demohttp://app.niucodata.com/mianbaoduo/recommend.php?id=599342024五一建模C题目成品论文http://app.niucodata.com/mianbaoduo/recommend.php?id=59935
欢迎进交流群讨论赛题和代码问题:953799264