设置覆盖城市之间的货物

时间:2013-05-30 18:44:08

标签: algorithm optimization

不同城市有许多仓库,其中保存着不同的产品。每个仓库可以保留一些产品的单位,例如(芝加哥的仓库保持14个A单位产品,20个B单位产品,0单位C等)。还有一份订单清单(包括目的地城市和所需产品数量)。我需要获得的是在完成所有订单时的最小发货数量(城市之间的最小唯一对数)。这些城市之间的距离并不重要。

澄清一下:样本输入如下:

WAREHOUSES

LOCATION | PRODUCT | AMOUNT
---------+---------+-------
Chicago  |   p1    |   14 
Chicago  |   p2    |    3
New York |   p1    |    2  
New York |   p3    |    7
Dallas   |   p2    |    3


ORDERS

DESTINATION | PRODUCT | AMOUNT
------------+---------+-------
Houston     |   p1    |   12 
Phoenix     |   p1    |    4
Houston     |   p3    |    2  
Detroit     |   p2    |    3
Phoenix     |   p2    |    2

和输出:

LOCATION | DESTINATION | PRODUCT | AMOUNT
---------+-------------+---------+-------
Chicago  | Houston     |    p1   |   12
Chicago  | Phoenix     |    p1   |    2
New York | Phoenix     |    p1   |    2
Chicago  | Phoenix     |    p2   |    2
Dallas   | Detroit     |    p2   |    3
New York | Houston     |    p3   |    2

and number of unique pairs is: 5

问题与此处发现的问题非常相似:Algorithm to Minimize Number of Shipments from Multiple Warehouses但是,它没有考虑订购特定产品的几个单位的可能性以及事实上,订单不止一个。

对我而言,它看起来像是两种问题的混合:集合覆盖和运输问题。有没有办法在不使用贪心算法的情况下解决这个问题?或者也许我只是错过了一些东西,它可以用简单的套装来解决?

3 个答案:

答案 0 :(得分:1)

如果您需要精确的解决方案,标准方法是将其建模为整数程序(IP),然后使用IP解算器(例如CBCGurobi等)。如果您对启发式解决方案感到满意,simulated annealing很容易实现。

答案 1 :(得分:1)

也许您可以根据问题创建一个二分图,并将其转换为具有多个源的最大流量。那么有一些多项式时间常数的算法?请在此处阅读:http://en.m.wikipedia.org/wiki/Bipartite_graph

答案 2 :(得分:0)

我没有一个完整的解决方案,但你可以通过分别考虑每个产品来简化它。

除非你错误地提出这个问题并且意味着允许订单包含两种不同的产品,否则这样做。