2024年MathorCup數學建模C題物流網絡分揀中心貨量預測及人員排班解題全過程文檔加程序

2024年第十四屆MathorCup高校數學建模挑戰賽

C題 物流網絡分揀中心貨量預測及人員排班

原題再現:

??電商物流網絡在訂單履約中由多個環節組成,圖1是一個簡化的物流網絡示意圖。其中,分揀中心作為網絡的中間環節,需要將包按照不同流向進行分揀并發往下一個場地,最終使包裹到達消費者手中。分揀中心管理效率的提升,對整體網絡的履約效率和運作成本起著十分重要的作用。
在這里插入圖片描述
??分揀中心的貨量預測是電商物流網絡重要的研究問題,對分揀中心貨量的精準預測是后續管理及決策的基礎,如果管理者可以提前預知之后一段時間各個分揀中心需要操作的貨量,便可以提前對資源進行安排。在此場景下的貨量預測目標一般有兩個:一是根據歷史貨量、物流網絡配信息,預測每個分揀中心每天的貨量;二是根據歷史貨量小時數據,預測每個分揀中心每小時的貨量。
??分揀中心的貨量預測與網絡的運輸線路有關,通過分析各線路的運輸貨量,可以得出各分揀中心之間的網絡連接關系。當線路關系調整時,可以參考線路的調整信息,得到各分揀中心貨量更為準確的預測。
??基于分揀中心貨量預測的人員排班是接下來要解決的重要問題,分揀中心的人員包含正式工和臨時工兩種:正式工是場地長期雇傭的人員,工作效率較高;臨時工是根據貨量情況臨時招募的人員,每天可以任意增減,但工作效率相對較低、雇傭成本較高。根據貨量預測結果合理安排人員,旨在完成工作的情況下盡可能降低人員成本。針對當前物流網絡,其人員安排班次及小時人效指標情況如下:
??1)對于所有分揀中心,每天分為6個班次,分別為:00:00-08:00:05:00-13:00,08:00-16:00,12:00-20:00,14:00-22:00,16:00-24:00每個人員(正式工或臨時工)每天只能出勤一個班次;
??2)小時人效指標為每人每小時完成分揀的包裹量(包裹量即貨量),正式工的最高小時人效為 25 包裹/小時,臨時工的最高小時人效為 20包裹/小時。
??該物流網絡包括 57 個分揀中心,每個分揀中心過去4個月的每天貨量如附件1所示,過去 30天的每小時貨量如附件2所示。基于以上數據,請完成以下問題:

??問題 1:建立貨量預測模型,對57 個分揀中心未來 30 天每天及每小時的貨量進行預測,將預測結果寫入結果表1和表2中。
??問題 2:過去 90 天各分揀中心之間的各運輸線路平均貨量如附件3所示。若未來 30 天分揀中心之間的運輸線路發生了變化,具體如附件4所示。根據附件 1-4,請對 57 個分揀中心未來 30天每天及每小時的貨量進行預測,并將預測結果寫入結果表3和表4中。
??問題3:假設每個分揀中心有60名正式工,在人員安排時將優先使用正式工,若需額外人員將使用臨時工。請基于問題2的預測結果建立模型,給出未來 30 天每個分揀中心每個班次的出勤人數,并寫入結果表5中。要求在每天的貨量處理完成的基礎上,安排的人天數(例如30天每天出勤200 名員工,則總人天數為 6000)盡可能少,且每天的實際小時人效盡量均衡。
??問題 4:研究特定分揀中心的排班問題,這里不妨以SC60為例,假設分揀中心 SC60 當前有 200 名正式工,請基于問題2的預測結果建立模型,確定未來 30 天每名正式工及臨時工的班次出勤計劃,即給出未來 30 天每天六個班次中,每名正式工將在哪些班次出勤,每個班次需要雇傭多少臨時工,并寫入結果表6中。每名正式工的出勤率(出勤的天數除以總天數30)不能高于 85%,且連續出勤天數不能超過7天。要求在每天貨量處理完成的基礎上,安排的人天數盡可能少,每天的實際小時人效盡量均衡且正式工出勤率盡量均衡。

整體求解過程概述(摘要)

??隨著電商物流的發展,網絡購物等活動的興起,分揀中心作為物流運輸的關鍵一環,提高其管理效率對降低運營成本,提高物流行業的運作效率,提升總體競爭力有著至關重要的作用。本文根據不同問題的信息與約束條件,運用一系列方法,得到了較合理的貨量預測及人員排班結果。
??對于問題一,預測 57個站點未來 30天每天及每小時的貨量,我們針對附件 1和附件2的時間序列數據的特點,分別建立了LSTM神經網絡模型與ARIMA模型。先對附件1的數據進行了數據預處理,利用LSTM神經網絡模型,對每個站點貨量進行預測,得到未來30天的貨量預測,詳見結果表1,。再對附件2的數據進行數據處理,利用ARIMA模型對每個站點貨量進行預測,得到未來30天每小時的貨量預測,詳見結果表2。
??對于問題二,在問題 1預測的數據基礎上,通過對變化運輸路線的分析,將變化路線上的貨量按比例向相關分揀中心進行重新分配,獲得對應貨量變化率,依據貨量變化率對分揀中心的貨量預測模型進行優化。根據優化后的模型得到各分揀中心未來30天每天和每時的貨量預測結果,詳見結果表3和結果表4。
??對于問題三,基于問題2的預測數據, 根據整數規劃對各分揀中心的人員排班最優問題建立數學模型,設立目標為最小化總人天數。建立處理貨物量約束、人員優先使用約束、小時人效均衡性約束等約束條件,對目標進行分析,利用簡單的任務分配算法對該整數線性規劃模型進行求解,得到未來30天各分揀中心每個班次正式工和臨時工的出勤人數,詳見結果表5。
??對于問題四,在問題2 的貨量預測基礎上,分析特定分揀中心SC60,依據多目標規劃對 SC60 的人員排班最優問題建立數學模型,設立兩個子目標為最小化總人天數和均衡正式工出勤率。建立處理貨物量約束、出勤率約束、連續出勤天數約束等約束條件,對兩個子目標進行分析,利用遺傳算法得到SC60未來30天的正式工和臨時工出勤計劃,詳見結果表6。

模型假設:

??本文將作如下假設,以便于模型的建立與求解:
??1、假設所給的歷史貨物數據均為真實數據。
??2、假設貨量的變化受歷史貨量、物流網絡配置等內部因素和促銷活動、節假日等外部因素的影響。
??3、假設對數據中缺失值的處理方式不會對預測結果造成太大的誤差。
??4、假設歷史數據符合時間序列,存在一定的季節性和周期性。
??5、假設貨量預測與運輸線路的變化相關,且這種關系可通過歷史數據量化。
??6、假設每名正式工和臨時工的工作效率在一定范圍內波動,但都在最高小時人效標準內。
??7、假設每名正式工和臨時工每天只能出勤一個班次,且工作時間為8小時。
??8、假設每個分揀中心都可以根據需求調整正式工和臨時工的人數。

問題分析:

??對問題一的分析
??將數據按分揀中心進行分組,提取歷史數據中的特征,如每日貨量、每小時貨量、運輸線路情況等,同時考慮其他可能影響貨量的因素,如節假日、促銷活動等,進行數據清洗。由于需要預測的兩個量:日貨量和時貨量有不同的特征,我們使用不同的模型來求解。對于日貨量預測,由于其具有時間序列的周期性與依賴性,我們使用LSTM時間序列預測模型,將附件1中過去4個月的每天貨量數據和附件2中過去30天的每小時貨量數據作為訓練數據對模型進行訓練,評估檢驗每個模型的性能,然后利用訓練好的模型對每個分揀中心分別預測未來30天的日貨量;對于小時貨量預測,由于其具有短時間的季節性與周期性,我們使用 ARIMA 模型,再通過選擇合適的模型參數分別預測未來30天的時貨量。

??對問題二的分析
??根據附件3和附件4中的數據,考慮過去90天各分揀中心之間的運輸線路情況及未來30天分揀中心之間的運輸線路的變化,分析線路變化對貨量的潛在影響。基于問題一中建立的貨量預測模型,對每個分揀中心繼續使用時序預測模型。在模型中加入考慮運輸線路變化對貨量預測的影響,調整模型參數以適應新的線路情況。對于某條線路貨量的變化,調整相關分揀中心的貨量以反映這一變化。利用新舊路線貨量的數據,我們計算出變化率,根據變化率對預測結果進行修正,以此實現對57 個分揀中心未來30天每天貨量和每小時貨量的預測。

??對問題三的分析
??設計一個整數線性規劃模型,目標函數是最小化總人天數,即所有決策變量的總和。以最大化分揀中心的效率為目的,并滿足每個分揀中心的出勤限制。使用歷史數據和附件2中的每小時貨量數據,以及57個分揀中心的正式工、臨時工人數為決策變量,確定目標函數系數,同時考慮每個分揀中心的人員出勤情況、員工效率和工作時間等約束條件。根據歷史數據和員工情況,確定每個分揀中心的最佳排班方案。

??對問題四的分析
??基于問題二的預測結果,計算 SC60 每個班次的貨量需求。考慮正式工和臨時工的最高小時人效標準,以及出勤率和連續出勤天數的限制條件,建立排班模型。在問題三的基礎上,用正式工出勤率方差作為新約束條件,設計優化算法,通過模擬和調整參數,優化排班模型,以確保每天貨量都能處理完成,且安排的人天數盡可能少。同時還要確保每天的實際小時人效盡量均衡,正式工出勤率盡量均衡,并滿足連續出勤天數和出勤率的限制條件,從而得出未來30天每天六個班次中,每名正式工將在哪些班次出勤,每個班次需要雇傭多少臨時工的排班計劃。

模型的建立與求解整體論文縮略圖

在這里插入圖片描述
在這里插入圖片描述

全部論文請見下方“ 只會建模 QQ名片” 點擊QQ名片即可

部分程序代碼:

import pandas as pd
import numpy as np
from statsmodels.tsa.statespace.sarimax import SARIMAX
from prophet import Prophet
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout
from sklearn.preprocessing import MinMaxScaler# --------------------------
# 數據加載與預處理
# --------------------------
def load_data():# 假設附件1為daily.csv,附件2為hourly.csvdaily_df = pd.read_csv("附件1-每日貨量.csv")hourly_df = pd.read_csv("附件2-每小時貨量.csv")# 日期格式轉換daily_df['date'] = pd.to_datetime(daily_df['date'])hourly_df['datetime'] = pd.to_datetime(hourly_df['datetime'])return daily_df, hourly_dfdef preprocess_daily(data):"""每日數據預處理"""# 缺失值處理(前向填充)data = data.fillna(method='ffill')# 添加時間特征data['day_of_week'] = data['date'].dt.dayofweekdata['is_holiday'] = data['date'].isin(holiday_dates)  # 需定義節假日列表data['days_to_promotion'] = (data['date'] - pd.to_datetime("2023-11-01")).dt.daysreturn datadef preprocess_hourly(data):"""每小時數據預處理"""# 數據縮放scaler = MinMaxScaler(feature_range=(0, 1))scaled_data = scaler.fit_transform(data[['volume']])# 創建滑動窗口數據集(用過去24小時預測未來24小時)def create_dataset(data, look_back=24):X, Y = [], []for i in range(len(data)-look_back-24):X.append(data[i:(i+look_back), 0])Y.append(data[(i+look_back):(i+look_back+24), 0])return np.array(X), np.array(Y)X, y = create_dataset(scaled_data)return X, y, scaler# --------------------------
# 預測模型
# --------------------------
class DailyForecaster:"""每日貨量預測器"""def __init__(self):self.models = {}  # 存儲每個分揀中心的模型def train(self, center_id, train_data):# SARIMA模型訓練model = SARIMAX(train_data,order=(2,1,2),seasonal_order=(1,1,1,7),enforce_stationarity=False)result = model.fit(disp=False)self.models[center_id] = resultdef predict(self, center_id, steps=30):model = self.models[center_id]forecast = model.get_forecast(steps=steps)return forecast.predicted_meanclass HourlyForecaster:"""每小時貨量預測器"""def __init__(self):self.scalers = {}self.models = {}def train(self, center_id, X_train, y_train):# LSTM模型構建model = Sequential()model.add(LSTM(64, return_sequences=True, input_shape=(X_train.shape[1], 1)))model.add(Dropout(0.2))model.add(LSTM(64))model.add(Dense(24))  # 預測24小時model.compile(loss='mean_squared_error', optimizer='adam')model.fit(X_train, y_train, epochs=50, batch_size=32, verbose=0)self.models[center_id] = modeldef predict(self, center_id, last_24h_data, scaler):model = self.models[center_id]scaled_input = scaler.transform(last_24h_data.reshape(-1,1))prediction = model.predict(scaled_input.reshape(1,24,1))return scaler.inverse_transform(prediction).flatten()# --------------------------
# 主流程
# --------------------------
if __name__ == "__main__":# 加載數據daily_df, hourly_df = load_data()# 生成每日預測結果表1daily_forecaster = DailyForecaster()centers = daily_df['center_id'].unique()table1 = pd.DataFrame(columns=['date'] + list(centers))for center in centers:center_data = daily_df[daily_df['center_id'] == center]daily_forecaster.train(center, center_data['volume'])forecast = daily_forecaster.predict(center, 30)table1[center] = forecast.values# 生成每小時預測結果表2hourly_forecaster = HourlyForecaster()table2 = pd.DataFrame(columns=['date', 'hour'] + list(centers))for center in centers:center_hourly = hourly_df[hourly_df['center_id'] == center]X, y, scaler = preprocess_hourly(center_hourly)hourly_forecaster.train(center, X, y)# 獲取最后24小時數據作為預測起點last_24h = center_hourly['volume'].values[-24:]for day in range(30):prediction = hourly_forecaster.predict(center, last_24h, scaler)# 更新最后24小時數據last_24h = np.append(last_24h[24:], prediction)# 寫入結果date_range = pd.date_range(start=daily_df['date'].max(), periods=30)for hour in range(24):table2.loc[len(table2)] = [date_range[day].strftime('%Y-%m-%d'),hour,prediction[hour]]# 結果保存table1.to_csv("結果表1-每日預測.csv", index=False)table2.to_csv("結果表2-每小時預測.csv", index=False)
全部論文請見下方“ 只會建模 QQ名片” 點擊QQ名片即可

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73379.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙Flutter開發故事:不,你不需要鴻蒙化

在華為牽頭下,Flutter 鴻蒙化如火如荼進行,當第一次看到一份上百個插件的Excel 列表時,我也感到震驚,排名前 100 的插件赫然在列,這無疑是一次大規模的軍團作戰。 然后,參戰團隊魚龍混雜,難免有…

Unity音頻混合器如何暴露參數

音頻混合器是Unity推薦管理音效混音的工具,那么如何使用代碼對它進行管理呢? 首先我在AudioMixer的Master組中創建了BGM和SFX的分組,你也可以直接用Master沒有問題。 這里我以BGM為例,如果要在代碼中進行使用就需要將參數暴露出去…

Vue項目與云管平臺Nginx部署筆記

Vue項目與云管平臺Nginx部署筆記 一、項目架構說明 footAdmin云管前端 Vue2 Webpack 構建,部署路徑:/usr/share/nginx/html/footAdmin 使用npm run build生成/dist目錄,然后將dist目錄下面的所有文件,上傳到虛擬機/usr/share/n…

java常用數據轉換

1. List與數組互轉 ArrayList<String> list new ArrayList<>(); String[] array list.stream().toArray(String[]::new); String[] array1 {"apple", "banana", "orange"}; List<String> list1 Arrays.stre…

JAVA學習--java數組--打印稀疏數組和稀疏數組的還原

1.題目描述 2.代碼實現 打印二維數組 public class test04 {public static void main(String args[]){//1.創建一個二維數組11*11&#xff0c;0代表沒有棋子&#xff0c;1代表黑&#xff0c;2代表白棋int[][] array1new int[11][11];array1[1][2]1;array1[2][3]2;//輸出原…

Java 標準注解(內置注解+元注解)的詳細說明及使用場景

以下是 Java 標準注解&#xff08;內置注解&#xff09;的詳細說明及使用場景&#xff1a; 1. 核心標準注解 (1) Override 用途&#xff1a;標記一個方法覆蓋父類的方法或實現接口的抽象方法。約束&#xff1a; 若方法未正確覆蓋/實現&#xff0c;編譯器會報錯。不能用于字段…

使用Python調用Jenkins Api之獲取構建日志使用說明文檔

簡介 通過 Python 腳本自動化獲取 Jenkins 構建日志&#xff0c;可以實現日志分析、錯誤監控、報告生成等功能。本文檔將介紹以下方法&#xff1a; Python-Jenkins 庫&#xff1a;官方推薦的 Python 客戶端庫 日志分頁與流式處理&#xff1a;應對大日志文件場景 準備工作 …

Day20-前端Web案例——部門管理

目錄 部門管理1. 前后端分離開發2. 準備工作2.1 創建Vue項目2.2 安裝依賴2.3 精簡項目 3. 頁面布局3.1 介紹3.2 整體布局3.3 左側菜單 4. Vue Router4.1 介紹4.2 入門4.3 案例4.4 首頁制作 5. 部門管理5.1部門列表5.1.1. 基本布局5.1.2 加載數據5.1.3 程序優化 5.2 新增部門5.3…

Android java 設計封裝增強型WebView組件

Android java 設計封裝增強型WebView組件&#xff08;兼容Android 4.4&#xff09; * 特性&#xff1a; * 1. 全生命周期管理 * 2. 智能硬件加速 * 3. 鏈式配置API * 4. 安全下載管理 * 5. 全屏視頻支持 public class EnhancedWebView extends WebView {private CustomWebChrom…

vue 點擊放大,圖片預覽效果

背景&#xff1a; 在使用vue框架element組件的背景下&#xff0c;我們對圖片的展示需要點擊放大(單張)&#xff1b;如果是多張圖片&#xff0c;要支持左右滑動查看多張圖片(多張)。 單張圖片放大&#xff0c;el-image圖片組件&#xff0c;或者原生的img標簽。 多張圖片放大&…

HTTP代理的全面解讀:什么是HTTP代理?HTTP代理的工作原理

在互聯網大潮中&#xff0c;每一個請求和返回數據的背后&#xff0c;都離不開傳輸協議的支持&#xff0c;而HTTP協議無疑是最熟悉的網絡通信基礎之一。當我們談到HTTP代理時&#xff0c;它不僅讓瀏覽網絡變得更高效&#xff0c;也為數據采集以及全球性遠程任務提供了解決方案。…

學習筆記--基于Sa-Token 實現Java項目單點登錄+同端互斥檢測

目錄 同端互斥登錄 單點登錄SSO 架構選型 模式二: URL重定向傳播 前后端分離 整體流程 準備工作 搭建客戶端 搭建認證中心SSO Server 環境配置 開放認證接口 啟動類 跨域處理 同端互斥登錄 同端互斥登陸 模塊 同端互斥登錄指&#xff1a;同一類型設備上只允許單地…

本地生活服務APP開發,市場發展全新商業機遇

隨著移動互聯網的快速發展&#xff0c;人們的消費和生活習慣發生了巨大改變&#xff0c;本地生活服務市場迎來了發展爆發期&#xff01;從外賣、團購等&#xff0c;人們越來越依賴通過手機APP解決日常生活中的各種需求。對于企業而言&#xff0c;一款完善、多樣、便捷的本地生活…

當科技業成為系統性壓榨的絞肉機

深夜的硅谷辦公室依然燈火通明&#xff0c;鍵盤敲擊聲此起彼伏。一位程序員在Slack上收到主管的緊急需求&#xff1a;“這個功能明早必須上線。”他苦笑一聲&#xff0c;關掉手機里名為“緩解焦慮”的冥想App——這已是本周第三次被迫服用公司提供的“心靈解藥”。此刻&#xf…

代碼隨想錄算法訓練營第五十六天 | 108.冗余連接 109.冗余連接II

108. 冗余連接 卡碼網題目鏈接&#xff08;ACM模式&#xff09;(opens new window) 題目描述 有一個圖&#xff0c;它是一棵樹&#xff0c;他是擁有 n 個節點&#xff08;節點編號1到n&#xff09;和 n - 1 條邊的連通無環無向圖&#xff08;其實就是一個線形圖&#xff09;…

什么是索引?為什么要使用B樹作為索引數據結構?

MySQL的事務特性 1.原子性:原子性就是這個事件要么執行完,要么沒執行,不會存在中間狀態,與C中華那個加鎖避免多線程競爭是一個道理; 2.一致性:保持事件的操作對象雙方某數據之和是不變的,就以轉賬為例,A轉給B100塊,那么A的余額多100,B的余額就必須少100; 3.隔離性:隔離就是獨…

pyqt5報錯:qt.qpa.plugin: Could not find the Qt platform plugin “xcb“(已解決)

我在使用pyqt庫的時候報錯&#xff1a; qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in \ "/mnt/private_disk/anaconda3/envs/aot-manip/lib/python3.8/site-packages/PyQt5/Qt5/plugins/platforms" even though it was found. This ap…

AI大模型全攻略:原理 · 部署 · Prompt · 場景應用

?? AI大模型全攻略:原理 部署 Prompt 場景應用 本文從基礎原理到實踐部署,再到 Prompt 工程與典型應用案例,全方位解析 AI 大模型的學習路徑與使用方法,適合開發者、產品經理、技術愛好者等不同背景讀者。 ?? 一、什么是 AI 大模型? AI 大模型(Large Language Mo…

2024年MathorCup數學建模D題量子計算在礦山設備配置及運營中的建模應用解題文檔與程序

2024年第十四屆MathorCup高校數學建模挑戰賽 D題 量子計算在礦山設備配置及運營中的建模應用 原題再現&#xff1a; 隨著智能技術的發展&#xff0c;智慧礦山的概念越來越受到重視。越來越多的設備供應商正在向智慧礦山整體解決方案供應商轉型&#xff0c;是否具備提供整體解…

Flink 流處理框架的核心特性

文章目錄 事件時間支持Flink狀態編程一、狀態的類型1. 托管狀態&#xff08;Managed State&#xff09;2. 原始狀態&#xff08;Raw State&#xff09; 二、狀態的管理和容錯 Flink端到端的一致性1、檢查點機制2、冪等3、事務 水位線窗口操作1、窗口類型2、窗口操作的時間語義 …