Java 产品和服务的数据结构/设计;运输信息

Java 产品和服务的数据结构/设计;运输信息,java,algorithm,data-structures,Java,Algorithm,Data Structures,我需要存储一些关于物品、仓库和运输成本的数据 例如,我的商店有一些商品,不同的仓库储存这些商品,但不一定是所有的商品。然后,每个仓库可能有不同的运输成本,这取决于它们离目的地的距离 举个例子 warehouse1 : item1, item3, item 5 warehouse2 : item1, item2 warehouse3 : item1, item3, item 4 so if the order consists of (item 1, item 2, item 3) it ca

我需要存储一些关于物品、仓库和运输成本的数据

例如,我的商店有一些商品,不同的仓库储存这些商品,但不一定是所有的商品。然后,每个仓库可能有不同的运输成本,这取决于它们离目的地的距离

举个例子

warehouse1 : item1, item3, item 5
warehouse2 : item1, item2
warehouse3 : item1, item3, item 4

so if the order consists of (item 1, item 2, item 3) 
it can be fulfilled by either warehouse1 + warehouse2, or warehouse3 + warehouse2. 
in this case it should choose whichever is cheaper
在这种情况下,我希望最小化用于完成订单的仓库数量,同时最小化成本。订单可以有多个不同类型的项目,但它们都将到达同一目的地

我想把所有产品的清单都储存起来

class Item{
   double price;
   List<Integer> warehouses; //id of all the warehouses that carry this item
}
类项目{
双倍价格;
列出仓库;//携带此项目的所有仓库的id
}
然而,计算完成订单的最佳仓库似乎很昂贵。现在,当收到订单时,我从哈希表中查找所有项目,以获得每个项目的所有仓库的列表


然后我可以创建一组所有可能的装运解决方案,然后从中选择最小成本解决方案。这是非常缓慢的,因为我必须生成所有可能的运输组合。我有一种预感,有一个更好的方法来做这件事,但似乎不能想出什么,有什么我错过了

你要求的基本上是教科书对

每个仓库都对应于一个子集,而宇宙将对应于您需要满足的顺序。不幸的是,这是NP完全的,已知的算法将具有指数复杂性


取决于问题中的其他约束条件(或取决于您的容错能力,同一链接中有多项式近似),您可能能够获得良好的启发式结果。

我过去没有设计过此类解决方案,但这是最有可能的方法,我将按照下面的概述进行

首先,我将构建一个基本案例,然后我将对其进行改进,而不是-提前生成所有可能的装运组合,因为您已经注意到,这将非常缓慢

我们在这里寻找的是一个快速解决方案,除了成本最优外,在实际情况下,您还必须考虑客户满意度

您的目标是生成一个
装运
,它基本上是一个订单的
映射

您需要另一个表来告诉您装运成本-
Map

基本情况

步骤#1.准备已订购的目的地距离内的所有仓库的列表,即按仓库距离的增加顺序对仓库进行排序

第2步。首先确定离目的地最近的仓库

步骤#3.删除步骤#2中检测到的仓库中可以完成的所有项目

第4步。对剩余项目重复第2步和第3步,忽略已查找的仓库

步骤#5.如果没有任何项目剩余,则停止

经过以上五个步骤,您将获得基本箱装运

要知道您的基本情况是否是一个足够好的解决方案,您应该已经有了一个装运启发,告诉您公司仓库布局和您所覆盖区域的特定目的地的大致允许成本,即此时您应该决定是否需要对基本情况进行改进

如果需要改进,您可以通过将项目从较短距离的仓库移动到较长距离的仓库来创建另一个新装运,前提是这样可以节省成本(当然,仅适用于较远仓库中的可用项目,并且如果较短仓库中的成组项目数量增加)

在五个步骤中,如果客户满意度占了上风,您也可以决定在上述第三步发货。通常认为,快速交付部分商品比让他/她等待大件包裹更方便客户

此外,我认为除了查找表之外,您不需要任何特定的数据结构

正如我已经说过的,我并没有真正实施任何类似的措施,这只是我的观点


希望能有帮助

对于客户来说,是一个包裹还是多个单独的包裹?客户可以收到多个包裹,主要目标是最小化运输成本。