2022年华中杯数学建模
A 题 分拣系统优化问题
真的有想占便宜的 醉了 几十元让我写论文这是什么选手 想占便宜想疯了么 还要求查重率在10% 一开始说想看看你的A题论文 想学习一下 然后谈完价(几十块钱)之后 需要改成现做一篇独一无二的论文 然后想套路我占便宜 套路是真的深啊 这不就是想占便宜么 还跟我说你这么想我也没办法 我想知道这是什么学校的高手
某电商公司配送中心的工作流程分为统计汇总、转运上架、按订单分拣、核对打包等步骤。其中,分拣环节操作复杂,耗时较长,其效率是影响配送中心整体性能的关键因素。
首先,系统统计汇总出当天全部待配送订单所包含的所有货品及相应数量。然后,转运工将这些货品由仓库转运至分拣处,并放置到货架上,等待分拣。上架时,一个货架中仅放置同一种货品。为简化问题,不考虑货架的容积和载重限制,即每个货架能够放置的货品件数没有限制。最后,分拣工按任务单依次分拣出每一个订单包含的货品。例如,某天共有 5 个订单,订单的信息如表 1(原始数据文件格式见附件 1 格式说明)所示。
表 1:订单信息示例
订单编号 所含货品种类及相应数量
D0001 P0001×2, P0002×1, P0003×1, P0004×1
D0002 P0003×1, P0004×1, P0005×1, P0006×3
D0003 P0001×1, P0003×1, P0005×1, P0007×1
D0004 P0002×1, P0004×1, P0006×1, P0008×3
D0005 P0001×1, P0003×2, P0004×1, P0007×1
系统统计出这 5 个订单共包含 8 种 26 件货品,分别为 4 件 P0001、2 件 P0002、5 件
P0003、4 件 P0004、2 件 P0005、4 件 P0006、2 件 P0007 和 3 件 P0008。转运工将这些货
品分别放置在 8 个货架上。分拣工根据任务单上的订单信息,依次分拣出每一个订单的货品。
随着该公司业务量不断增长,未来有可能出现当天待配送订单所含货品种类数大于当前货架数量的情况(假设任何一个订单所含货品种类数均小于货架数量 )。但是,由于受到场地和成本的限制,很难直接增加货架。该公司希望在你们团队的协助下解决该问题,并尝试提高分拣效率。具体解决如下问题。
1. 设计分批算法:将当日订单分为多个批次。要求每个批次的订单所含货品种类数均不超过 ,且批次越少越好(相应转运次数也越少,效率越高)。针对附件 1 中的订单信息,应用你们的算法,计算当货架数量 时最少的批次数,给出每批订单数量、货品种类数、分批方案等结果,并将完整原始分批方案按指定格式输出到文件result1.csv 中,格式要求见附件 2。
2. 优化货品摆放位置:确定每一种货品放置在哪一个货架。分拣工拣选货品时,同一订
单所含货品的位置越集中,移动距离越短,拣选效率越高。分拣处简化布局示意图如
图 1。假设所有货架等距排列在一条直线上,按照摆放位置的顺序,货架的序号依次
为1,2,3,…,N ,货品i所在货架的序号为S(i) 。某一订单Qk的拣选距离定义为该订
单中货品所在货架序号的最大值与最小值之差,即:
对于给定的某一批分拣任务,请设计货品摆放算法,使得该批分拣任务所有订单的拣选距离总和尽量小。并针对附件 1 的数据,在第 1 问得到的分批结果基础上,考虑拣选距离,设计各批次中每一种货品的摆放位置,给出各批分拣任务的拣选距离总和,以及所有批次全部订单的拣选距离总和,并将完整原始货品摆放方案按指定格式输出到文件 result2.csv 中,格式要求见附件 3。
3. 指派分拣任务:按批次将所有订单分配给多个分拣工并行完成分拣任务。假设:
1) 分拣工在分拣过程中互相不会干扰,即运动路线不会冲突,也可以同时拣选同一货架上的货品。
2) 一位分拣工同一时间只能处理一个订单,即一位分拣工完成一个订单的分拣工作之后,才能开始下一个订单的分拣工作。
3) 每位分拣工在自己的分拣任务完成之前,始终匀速运动,忽略从货架上取货所需的时间,忽略订单之间的切换时间,忽略休息时间,且所有分拣工的运动速度相同。
4) 结合前一个假设,一位分拣工在处理当前订单时,只要经过该订单中某一货品所在货架至少一次,就视为已经拣选到该货品。
5) 拣选到的货品放入拣货筐中,同一订单的货品放入同一个拣货筐中,不考虑拣货筐容量限制。一个订单的货品全部拣齐后,分拣工将该筐放上传送带,自动转移至核对打包环节,之后可立即原地取用一个新的空的拣货筐。忽略放置拣货筐、取用新筐的时间。
6) 在每一批分拣任务开始前,每位分拣工领取到自己当前批次的任务单,需要按照任务单上的订单顺序,依次完成所有订单的分拣工作。同一订单中的不同货品不区分拣货顺序,由分拣工按照最优方式决定。
7) 在每一批分拣任务开始时,所有分拣工位于 1 号货架处,同时由 1 号货架出发,开始当前批次的分拣工作。每位分拣工完成一个订单之后,可以立即开始下一个订单的分拣工作,不需要回到 1 号货架。分拣工在拣选完当前批次自己任务单上所有订单的货品后,回到 1 号货架,完成当前批次任务,休息,等待下一批分拣任务开始。
8) 假设不考虑货架的几何尺寸,相邻两个货架间的距离均为单位 1,结合上述假设,某一分拣工分拣完成任务单上所有订单所需时间与其运动总距离呈正比。对于给定的某一批分拣任务,且货品摆放位置已知,请设计订单指派算法,将分拣任务分配给n位分拣工,使得能够尽快完成任务,且运动距离尽可能均衡。针对附件 1 的数据,在前两问的基础上,当分拣工人数 时,计算各批次中订单的指派结果及每一位分拣工处理订单的顺序,并将完整原始指派方案按指定格式输出到文件 result3.csv 中,格式要求见附件 4。
附件 1:订单信息
格式说明:
csv 格式,第一行为标题行,每行以英文逗号分隔,共三列:
➢ “OrderNo”表示订单编号,D0001、D0002、……、D0923。
➢ “ItemNo”表示货品编号,P0001、P0002、……、P1941。
➢ “Quantity”表示货品数量。
以第一行数据为例,“D0001, P0128, 4”表示在订单 D0001 中,包括 4 件货品 P0128。
clear
load item_01.mat item_mat
[a,b]=size(item_mat)
result=zeros(1,a);
P=1
flag=1
flagg=1
while ~isempty(find(result==0))
sigma_kind=[];%此列向量为每一笔订单的商品种类数
for i=1:
sigma_kind(i,1)=sum(item_mat(i,:));
if sigma_kind(i,1)==inf
sigma_kind(i,1)=0;
end
end
f=find(sigma_kind==max(sigma_kind),1);
father=item_mat(f,:);%最多种类的订单向量,将其作为聚类的父点
result(f)=P;
item_mat(find(sigma_kind==max(sigma_kind),1),:)=inf;%防止后续遍历时父点
被选择到
best_order=0;
flag=1; %%%%%%%
while flag==1
best_delta=inf;
for i=1:a
if item_mat(i,1)==inf
continue
end
DIFF=difference(father,item_mat(i,:));
if best_delta>DIFF
best_order=i;
best_delta=DIFF;
end
end
if best_delta==0
result(best_order)=P;
item_mat(best_order,:)=inf;
else
temp_father=father+item_mat(best_order,:);
temp_father(temp_father==2)=1;
if sum(temp_father)<=200
father=temp_father;
result(best_order)=P;
item_mat(best_order,:)=inf;
else
if
(sum(temp_father)>200)||(length(find(item_mat(:,1)==inf))==a)
sum_son(flagg,1)=(sum(father))
flagg=flagg+1;
flag=0;
end
end
end
end
P=P+1
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
find(result==65)
function delta=difference(father,son)%用于判断 father 向量与 son 向量的差
异度
together=father+son;
together(together==2)=1;
delta=norm(father-together);
end