一家大型零售店有不同容量的货架来存放不同种类的商品。假设没有限制哪个商品去哪个货架,任何商品都可以放在任何货架上。目前的挑战是如何在货架容量不超过的每个货架上优化分配不同重量的商品。
所以,如果一个货架的容量是500kg,我们需要把不同重量的商品放在一起,这样n种商品的总重量之和为<;=500kg。在
这可以看作是为一个预定义值寻找和组合的问题。我关注了this问题,得到了一个由thefourtheye编写的解决方案。在
下面是我使用的代码片段import pandas as pd
def a(lst, target, with_replacement=False):
def _a(idx, l, r, t, w):
if t == sum(l): r.append(l)
elif t < sum(l): return
for u in range(idx, len(lst)):
_a(u if w else (u + 1), l + [lst[u]], r, t, w)
return r
return _a(0, [], [], target, with_replacement)
commodity_weights = pd.np.array(retail_data.commodity_weights)
b = a(commodity_weights,1000000)
因此,100万是一个货架的目标容量,需要通过放置不同重量的商品来达到。运行上述代码,b提供的输出是
^{pr2}$
因此,这里我们只得到不同商品的权重,每个数组的和满足目标容量。在代码应该运行得更快,但是为了得到输出,我不得不等了将近2分钟。目标号码(1000000)是否导致延迟?或者还有其他有效的方法?在
这里我只知道商品的重量。retail_data有多个列,其中两个列是commodity_weights&;commodity_id。在上面显示的结果中,我们只能看到权重,但我也需要commodity_id。所以我的结果应该同时产生commodity_id和关联的commodity_weights。我怎么能得到那个?
从id和权重列表中,是否有任何方法可以在分配方面实现最佳化?在
提前谢谢!!在