当前位置:   article > 正文

2024年MathorCup数模竞赛C题问题一二+部分代码分享_2024mathorcupc题代码

2024mathorcupc题代码

问题一

问题一要求对未来30天每天及每小时的货量进行预测。首先,利用混合ARIMA-LSTM模型进行时间序列预测。ARIMA模型擅长捕捉线性特征和趋势,而LSTM模型处理非线性关系和长期依赖。通过结合这两种模型,可以提高预测精度。具体步骤包括:

  1. 建立ARIMA模型,通过差分运算和ARMA模型组合来处理时间序列数据。
  2. 建立LSTM模型,利用其长短期记忆能力处理复杂的时间序列模式。
  3. 结合ARIMA和LSTM模型的预测结果,通过自适应混合算法调整权重,以提高预测准确性。
    在这里插入图片描述
    在这里插入图片描述

问题二

问题二要求在考虑运输线路改变的前提下,对未来30天每天及每小时的货量进行预测。解决方法涉及建立神经网络模型和聚类算法。具体步骤包括:

  1. 利用K-means算法对分拣中心的货量进行聚类,以理解不同类型货物的分布规律。
  2. 建立BP神经网络模型,通过特征选取和网络训练,预测货量变化。
  3. 基于聚类和BP神经网络的预测结果,分析运输线路变化对货量的影响,并通过回归图和折线图直观展示货量变化情况。在这里插入图片描述

代码

混合ARIMA-LSTM模型构建

clc
clear
close all;
load('appendix1.mat') %读入附件1
mape_record = [];
W_record = [];
pre_record = [];
for c=1:size(appendix1,2) % 遍历每一个分拣中心
    data = appendix1{1,c}; %将分拣中心另存出来
    train_num = 5; %用几期的值作为参考来训练权重
    %% 下面是ARIMA计算权重
    [y_train_ARIMA]=ARIMA(data(1:end-train_num,3),train_num); 
    y_ture_ARIMA = data(end-train_num+1:end,3);
    wmape_ARIMA = sum(abs(y_train_ARIMA-y_ture_ARIMA)./y_ture_ARIMA);
    % 下面计算MAPE
    APE_ARIMA = abs(y_ture_ARIMA - y_train_ARIMA) ./ abs(y_ture_ARIMA);  
    MAPE_ARIMA = mean(APE_ARIMA);
    %% 下面是LSTM计算权重
    ref = 30; %参考历史的多少期
    [y_train_LSTM]=LSTM(data(1:end-train_num,3),ref,train_num);
    y_ture_LSTM = data(end-train_num+1:end,3);
    wmape_LSTM = sum(abs(y_train_LSTM-y_ture_LSTM)./y_ture_LSTM);
    % 下面计算MAPE
    APE_LSTM = abs(y_ture_LSTM - y_train_LSTM) ./ abs(y_ture_LSTM);  
    MAPE_LSTM = mean(APE_LSTM);
    %% 下面计算权重
    W_ARIMA = (1/wmape_ARIMA)/((1/wmape_ARIMA)+(1/wmape_LSTM));
    W_LSTM = 1-W_ARIMA;
    W_record(c,1) = data(1,1); %记录id
    W_record(c,2) = W_ARIMA; %记录ARIMAMAPE
    W_record(c,3) = W_LSTM; %记录LSTMMAPE
    %% 下面记录MAPE
    mape_record(c,1) = data(1,1); %记录id
    mape_record(c,2) = MAPE_ARIMA; %记录ARIMAMAPE
    mape_record(c,3) = MAPE_LSTM; %记录LSTMMAPE
    %% 下面正式预测
    pre_step = 30; %预测未来多少期的值
    % ARIMA
    [pre_ARIMA]=ARIMA(data(:,3),pre_step); 
    % LSTM
    [pre_LSTM]=LSTM(data(:,3),ref,pre_step);
    % 混合
    pre = pre_ARIMA*W_ARIMA + pre_LSTM*W_LSTM;
    pre_record(1,c) = data(1,1); %记录id
    pre_record(2:1+pre_step,c) = pre; %记录预测值
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

完整数据与代码

第一问

在这里插入图片描述

第二问

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/585748
推荐阅读
相关标签
  

闽ICP备14008679号