php - 重新排序订单以提高仓库效率

标签 php algorithm language-agnostic sorting

我正在尝试优化我工作中的订单填写方式。现在,一名员工只需抓取最新的 16 个订单(有时是 14 或 18 个)并填写它们。

我正在尝试更改它,而不是简单地按照最新的订单列表进行排序,而是对它们进行排序,以便每个批处理在相似的位置都有订单。但是我不知道应该如何对列表进行排序。下面是我想要做的事情的简化示例。

示例订单列表:

  • 订单 1:位置 E 有 2 个产品,位置 Q 有 5 个产品
  • 订单 2:Z 位置 1 个,B 位置 20 个
  • 顺序 3:Y 位置 1 个,N 位置 1 个
  • 订单 4:3 在位置 B
  • 订单 5:A 位置 1 个,E 位置 10 个
  • 顺序6:A位置1个,B位置1个,Q位置5个

对列表排序后,我希望顺序 2 和 4 彼此相邻,顺序 1 和 6 彼此相邻,等等。像这样:

  • 订单 1:位置 E 有 2 个产品,位置 Q 有 5 个产品
  • 顺序6:A位置1个,B位置1个,Q位置5个
  • 订单 2:Z 位置 1 个,B 位置 20 个
  • 订单 4:3 在位置 B
  • 顺序 3:Y 位置 1 个,N 位置 1 个
  • 订单 5:A 位置 1 个,E 位置 10 个

我正在使用 PHP,但任何语言的示例或提示都会非常有帮助。

编辑:

让我试着更详细地解释一下。员工抓取批量订单,然后他们使用带有条形码扫描仪的 PDA 填写订单。我们的仓库设置为首先是位置 A,然后是 B,依此类推。根本不涉及回溯。通常,他们必须走遍整个仓库才能完成这批订单,因为平均而言,16 个订单将包含来自所有位置的产品。

如果我将下一个要填写的订单的排序从订单日期更改为订单产品的位置,那么一批订单可能只有 A-G 位置,而不必遍历整个仓库。


另一个编辑(我真的需要在发布好的细节方面做得更好)

这是我们目前的流程:

  1. 拣货员抓起一辆装有 16 个桶的手推车
  2. 拣货员通过 PDA(带扫描仪和 wifi)将桶中的 16 个唯一条形码扫描到网页上,并创建“拣货单”
  3. 产品按位置排序(拣货员只经过任何产品一次)
  4. 然后特殊网页会告诉员工要抓取的产品和数量,然后他们扫描产品上的条形码
  5. 然后它会说明将产品放入哪个桶中,然后他们会扫描将产品放入的桶上的条形码
  6. 挑选完所有产品后,Picker 前往装运站,将其中一个桶扫描到 VB 程序中(是的,我知道。总有一天会被转换)
  7. 为该“提货单”中的所有订单打印收据,并将其放入正确的存储桶中
  8. 每个桶都清空并打包
  9. 现在,拣货员将打包好的订单放在秤上,然后将收据上的条形码扫描到程序中。
  10. 自动打印正确的邮资,订单被标记为已发货,并向客户发送一封包含跟踪信息的电子邮件
  11. 寄件人将邮资标签贴在页面上,密封后放入成品包裹堆中
  12. 一天结束时,USPS 和 UPS 取货。

我还应该指出,我们的很多/大部分产品都很小,一张 16 份订单的“提货单”可能有 500-800 件。目前,我们有大约 28,000 种不同的产品库存。

最佳答案

正如我在对该问题的评论中所写,我认为您只是以错误的方式看待问题。

您的描述暗示他们可以在必须“构建”/完成订单之前前往所有地点。问题是现在,事物是根据订单分组的,所以他们试图通过前往所有需要的位置来填写订单 #1,然后他们开始查看订单 #2,等等。

相反,您需要向他们提供有关地点的汇总信息,以及他们需要在每个地点取货的信息。然后他们就可以按照任何顺序前往所有地点,并从每个地点挑选他们需要的一切。当他们去过所有地点后,他们会浏览列表并从他们的一大堆东西中填写订单。

如果我在这里做了一些不正确的假设,请告诉我,我会尝试提出不同的方法。


只是为了尝试消除差异,这里是员工在每种方法中的动议(前两个不确定,因为他们可能按照不同的顺序去地点,我只是按照你列出的确切顺序,作为员工可能会)。

原始按日期排序(12 步):

E > Q > Z > B > Y > N > B > A > E > A > B > Q

您重新排序的版本(10 步):

E > Q > A > B > Z > B > Y > N > A > E

按位置聚合(7 步):

A > B > E > N > Q > Y > Z

为了进一步强调差异,如果我假设您所有的位置都与前一个位置等距(因此从 A 移动到 B 的成本为 1),并且每个字母都有一个。还假设你们都想在位置 0 开始和结束,你有:

原始按日期排序:移动量 = 138
您的重新排序版本: 移动量 = 138 (有点令人惊讶)
按位置聚合:移动量 = 52

关于php - 重新排序订单以提高仓库效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/869456/

相关文章:

java - 任务错误答案 - 算法错误

algorithm - 什么是日历队列?

haskell - 在编程语言和范例的上下文中, "Pure"是什么意思?

PHP preg_replace 用三种不同的模式三次?对还是错?

php - CodeIgniter Active Record 多个 WHERE 子句

php - 如何在模板/函数中显示 WordPress WooCommerce 自定义属性?

algorithm - Hashcode计算为什么乘法忽略溢出位?

c# - 在类似于 String IndexOf() 的更大 byte[] 中寻找 byte[]?

algorithm - 带摩擦力的运动算法

php - Shopify 本地安装