当前位置:   article > 正文

2024Mathorcup(妈妈杯)数学建模C题python代码+数据教学_2024mathorcup数学建模c题思路过程

2024mathorcup数学建模c题思路过程

2024Mathorcup数学建模挑战赛(妈妈杯)C题保姆级分析完整思路+代码+数据教学

C题题目:物流网络分拣中心货量预测及人员排班

因为一些不可抗力,下面仅展示部分代码(很少部分部分)和部分分析过程,其余代码看文末

数据处理

  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. from matplotlib.font_manager import FontProperties
  4. from statsmodels.tsa.arima.model import ARIMA
  5. from statsmodels.tsa.stattools import adfuller
  6. from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
  7. import pmdarima as pm
  8. from itertools import product
  9. from sklearn.preprocessing import MinMaxScaler
  10. import torch
  11. import torch.nn as nn
  12. import torch.optim as optim
  13. import numpy as np
  14. try:
  15. # 尝试使用UTF-8编码读取文件
  16. day_df = pd.read_csv('./附件/附件1.csv', encoding='utf-8')
  17. except UnicodeDecodeError:
  18. # 如果出现编码错误,则尝试使用GBK编码读取
  19. day_df = pd.read_csv('./附件/附件1.csv', encoding='gbk')
  20. day_df
  21. # 将'日期'转换为datetime类型以便正确排序
  22. day_df['日期'] = pd.to_datetime(day_df['日期'])
  23. # 按'日期'升序排列DataFrame
  24. sorted_day_df = day_df.sort_values(by=['分拣中心', '日期'])
  25. sorted_day_df

可视化

  1. # Set the font to support Chinese characters
  2. plt.rcParams['font.sans-serif'] = ['SimHei']
  3. plt.rcParams['axes.unicode_minus'] = False
  4. plt.figure(figsize=(10, 6))
  5. for center in sorted_day_df['分拣中心'].unique():
  6. center_df = sorted_day_df[sorted_day_df['分拣中心'] == center]
  7. plt.plot(center_df['日期'], center_df['货量'], marker='o', label=center)
  8. plt.title('日期随货量变化的折线图')
  9. plt.xlabel('日期')
  10. plt.ylabel('货量')
  11. # plt.legend()
  12. plt.grid(True)
  13. plt.tight_layout()
  14. plt.show()

  1. # 绘制ACF和PACF图
  2. fig, ax = plt.subplots(1, 2, figsize=(12, 4))
  3. plot_acf(center_df['货量'], ax=ax[0])
  4. plot_pacf(center_df['货量'], ax=ax[1])
  5. plt.tight_layout()
  6. plt.show()

  1. for center in centers:
  2. center_df = sorted_day_df[sorted_day_df['分拣中心'] == center]
  3. center_df.set_index('日期', inplace=True)
  4. # 使用SARIMAX而不是ARIMA来考虑外生变量
  5. model = SARIMAX(center_df['货量'], exog=center_df['活动'], order=(1, 1, 1))
  6. model_fit = model.fit()
  7. # 预测时也需要包括外生变量
  8. # 假设我们已经有了未来时间段的活动标记数据
  9. future_dates = pd.date_range(center_df.index[-1] + pd.Timedelta(days=1), periods=30, freq='D')
  10. future_exog = pd.DataFrame(0, index=future_dates, columns=['活动']) # 假设未来5天内没有活动
  11. forecast = model_fit.forecast(steps=30, exog=future_exog)
  12. print(f"{center} 的未来 30 天预测货量为:")
  13. print(forecast)
  14. # 将预测结果转换为DataFrame
  15. forecast_df = pd.DataFrame({
  16. '分拣中心': center,
  17. '日期': future_dates,
  18. '货量': forecast.values
  19. })
  20. all_forecasts.append(forecast_df)
  21. # 合并所有分拣中心的预测结果
  22. final_forecast_df = pd.concat(all_forecasts)

预测结果:

其中更详细的思路,各题目思路、代码、讲解视频、成品论文及其他相关内容,可以点击下方群名片哦!

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

闽ICP备14008679号