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

news2024/11/25 2:51:44

一、问题重述

电商物流网络在订单履约中由多个环节组成,图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包裹1小时。

该物流网络包括57个分拣中心,每个分拣中心过去4个月的每天货量如附件1所示,过去30天的每小时货量如附件2所示。基于以上数据,请完成以下问题:

问题 1

建立货量预测模型,对57 个分拣中心未来 30 天每天及每小时的货量进行预测,将预测结果写入结果表1和表2中。

解题思路

使用了深度学习中的长短期记忆(LSTM)神经网络来进行时间序列的预测

数据加载和预处理:

1、使用Pandas库加载CSV文件,并将日期列转换为日期时间格式。

2、对数据进行预处理,包括选择特定的分拣中心,对货量数据进行归一化处理。

3、将时间序列数据转换为适用于LSTM模型的输入格式。这里使用了一个滑动窗口的方法,将过去一段时间的数据作为输入,然后使用下一时刻的数据作为输出。

4、使用Keras库构建一个简单的LSTM模型,包括一个LSTM层和一个全连接层。

5、编译模型,并使用训练数据进行模型训练。

6、使用训练好的模型进行未来30天每小时的预测。在每次预测时,将最近的24小时数据传递给模型,并预测下一个时刻的货量。

7、使用逆变换将归一化的预测结果转换回原始货量值。

8、将预测结果写入CSV文件,包括分拣中心、日期、小时和预测货量。

解题代码(python)

import pandas as pd

file_paths = ['附件1.csv', '附件2.csv', '附件3.csv', '附件4.csv']

data_frames_gb2312 = [pd.read_csv(file_path, encoding='GB2312') for file_path in file_paths]


for i, df in enumerate(data_frames_gb2312, start=1):
    print(f"Data from 附件{i} :")
    print(df.head(), "\n")



#%%

from sklearn.preprocessing import OneHotEncoder

data = pd.read_csv('附件1.csv', encoding='GB2312')

encoder = OneHotEncoder()
center_encoded = encoder.fit_transform(data[['分拣中心']]).toarray()  # 使用.toarray()将稀疏矩阵转换为密集矩阵

# 将编码后的数据转换为DataFrame,并添加回原始数据集
center_encoded_df = pd.DataFrame(center_encoded, columns=encoder.get_feature_names_out())
data = data.reset_index(drop=True)
data_encoded = pd.concat([data.drop('分拣中心', axis=1), center_encoded_df], axis=1)

# 显示处理后的数据前几行
data_encoded.head()

import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from matplotlib import pyplot as plt

# 数据加载
data = pd.read_csv('附件1.csv', encoding='GB2312')
data['日期'] = pd.to_datetime(data['日期'])
data = data.sort_values('日期')

# 仅使用SC48分拣中心的数据作为示例
data_example = data[data['分拣中心'] == 'SC48'].groupby('日期')['货量'].sum().reset_index()

# 数据标准化
scaler = MinMaxScaler(feature_range=(0, 1))
data_example['货量'] = scaler.fit_transform(data_example[['货量']])

# 将时间序列数据转换为监督学习问题
def create_dataset(dataset, look_back=1):
    X, Y = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back)]
        X.append(a)
        Y.append(dataset[i + look_back])
    return np.array(X), np.array(Y)

look_back = 1
scaled = data_example['货量'].values
X, Y = create_dataset(scaled, look_back)
X = np.reshape(X, (X.shape[0], 1, X.shape[1]))

# 构建LSTM模型
model = Sequential()
model.add(LSTM(4, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

# 模型训练
model.fit(X, Y, epochs=100, batch_size=1, verbose=2)

# 进行预测
train_predict = model.predict(X)

# 反转预测值以便可视化
train_predict = scaler.inverse_transform(train_predict)
Y_inverse = scaler.inverse_transform([Y])

# 计算性能指标
train_score = np.sqrt(mean_squared_error(Y_inverse[0], train_predict[:,0]))
print('Train Score: %.2f RMSE' % (train_score))

# 可视化展示
plt.figure(figsize=(10,6))
plt.plot(scaler.inverse_transform(scaled.reshape(-1,1)))
plt.plot(train_predict)
plt.title('LSTM Time Series Prediction')
plt.ylabel('货量')
plt.xlabel('时间点')
plt.legend(['Actual', 'Predicted'], loc='upper right')
plt.show()

问题 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天。要求在每天货量处理完成的基础上,安排的人天数尽可能少,每天的实际小时人效尽量均衡,且正式工出勤率尽量均衡。

解题思路与代码

待更新

资料获取

提供2024MathorCupBC题的思路分析与代码,欢迎进群讨论:953799264

C题目思路代码获取:http://app.niucodata.com/mianbaoduo/recommend.php?id=59187

C题目成品论文获取:http://app.niucodata.com/mianbaoduo/recommend.php?id=59181

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

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

相关文章

一文搞懂OSI七层!

1.OSI OSI (Open System Interconnect),即开放式系统互联是一个完整的、完善的宏观模型。 TCP/IP协议提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。更加侧重的是互联网通信核…

动态代理 --java学习笔记

什么是动态代理? 当一个类的很多方法都存在重复冗杂的部分,就可以使用代理来处理那些重复部分的任务,到了各自的实现部分再丢回给原方法处理,同时也可以提高方法的扩展性,而动态则是指在运行时动态地创建代理对象&…

算法题解记录8+++爬楼梯(百日筑基)

题目描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶…

2024年【安全员-A证】最新解析及安全员-A证模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年【安全员-A证】最新解析及安全员-A证模拟考试题,包含安全员-A证最新解析答案和解析及安全员-A证模拟考试题练习。安全生产模拟考试一点通结合国家安全员-A证考试最新大纲及安全员-A证考试真题汇总&a…

AI投研分析,模块化赛道可能会出现新的头部公链

随着比特币ETF的通过,再加上比特币第四次减半临近,备受期待的新一轮牛市周期已经开启了,然而对于那些刚穿越过熊市的新韭菜而言,因为总觉得没这么快涨起来,而对二级市场交易变得非常谨慎,导致了很多新韭菜在…

Unity之Unity面试题(六)

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之Unity面试题(六) TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取…

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

情形:Spring配置类注解方式整合MyBatis 异常: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 解决: 检查mapper的全类名和mapper.xml的namespace是否一致检查mapper下的方法名和mapper.xml的sql的id是否…

电脑离线调用微信 ocr.exe 使用 python 调用 WeChatOCR.exe 附python代码

微信的OCR识别能力还是可以的,并且可以得到位置,速度也快,我想要把微信的这个exe 单独提取出来,可以供其他项目使用,目前已有的应该都是需要依赖微信运行状态的,我这个独一份 相当于把微信运行它的OCR的环境完全剥离出来,只需要几个代码文件加上几个模型文件就可以离线…

react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)

先看样子 组件代码: import React, { useState, useEffect } from react import { Row, Col, Modal, Spin, Input, Button, message, Form } from antd import { LockOutlined, EyeTwoTone, EyeInvisibleOutlined } from ant-design/icons import * as Serve from …

如何申请做快团团购帮卖团长?免费试用教程一学就会!

新手小白想要自己做快团团,有两种方法。 1、自己提供货源,自己开团做团长。 这种方法流程非常简单,从微信小程序中找到快团团,点击右上角“一键开团”,然后“创建普通团购”,按照操作设置就可以开团了。 …

Java高频面试之JVM篇

说一下 Jvm 的主要组成部分?及其作用? 类加载器执行器运行时数据区域本地接口 谈谈对运行时数据区的理解? 堆和栈的区别是什么? 堆中存什么?栈中存什么? 堆总存对象,栈中存局部变量,引用 为什么要把堆…

静音检测电路芯片D3703F——工 作 电 压 范 围 宽 : 3.2V ~ 16.0V,可以用于汽 车 音 响 系 统

概 述 : D3703F 是 一 块 汽 车 音 响 静 音 检 测 电 路 。 用 于 音 响 系 统 检 测 在 放 音 或 快 进 / 退 时 进 行 静 音 检 测 。 D3703F 的 的 电 压 范 围 : 3.2V ~ 16V , 信 号 检 测 和 静 音 时 间 可 通 过 外 围…

参花期刊投稿发表论文

《参花》是由国家新闻出版总署批准,吉林省文化和旅游厅主管,吉林省文化馆主办的正规文学类期刊。文学是用语言塑造形象反映社会生活的一种语言艺术,是自觉、独立而又面向整个社会的艺术,是文化中极具强烈感染力的重要组成部分&…

Java List基础篇

目录 前言一、常用List1.1 List1.1.1 特点1.1.2 常用API 1.2 ArrayList1.2.1 特点1.2.2 使用 1.3 LinkedList1.3.1 特点1.3.2 使用 1.4 CopyOnWriteArrayList1.4.1 特点1.4.2 使用 1.5 Arrays.asList()1.5.1 特点1.5.2 使用 二、对比总结 前言 一、常用List 1.1 List List是…

C++STL--谓词

谓词 ① 可调用的表达式称为谓词,包括仿函数,自定义函数,lambda表达式。 ② 接受一个参数的谓词,称为一元谓词。 ③ 接受两个参数的谓词,称为二元谓词。 可调用的表达式:对于一个对象或者表达式,如果可以使用调用运算符(),就称它为可以调用的。 一元谓…

2024年【T电梯修理】考试总结及T电梯修理考试技巧

题库来源:安全生产模拟考试一点通公众号小程序 T电梯修理考试总结考前必练!安全生产模拟考试一点通每个月更新T电梯修理考试技巧题目及答案!多做几遍,其实通过T电梯修理试题及解析很简单。 1、【多选题】修理工陶、陈&#xff0c…

李沐27_含并行连结的网络GoogLeNet_Inception——自学笔记

Inception块 1.四个路径从不同层面抽取信息,然后在输出通道维合并。 2.有更少的参数个数和计算复杂度(相比于3X3和5X5卷积层) GoogLeNet 1.五个stages,九个inception块 Inception各种后续变种 1.Inception-BN(V2)——使用ba…

SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测

SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测预测效果基本介绍模型描述程…

STL--pair 数对

pair 数对&#x1f357; pair是一个模板类,使用时需要引用文件 #include <utility>//通用工具pair可将两个value处理为一个元素。C标准库内多处用到了这个结构。尤其容器 map、unordered_map和unordered_multimap就是使用pair来管理其内部元素(key_value),任何函数如果…

MySQL一些特殊功能的索引(6/16)

特殊功能性索引 B-Tree索引&#xff1a; InnoDB的默认索引类型&#xff0c;适用于多种查询操作。 可以用于等值查询、范围查询和索引列的组合查询。 创建B-Tree索引的示例&#xff1a; CREATE INDEX index_name ON table_name (column1, column2);全文索引&#xff08;FULLTEX…