Algorithm 箱子包装-已知数量的独特箱子的变体和数量

Algorithm 箱子包装-已知数量的独特箱子的变体和数量,algorithm,math,bin-packing,Algorithm,Math,Bin Packing,我有一个挠头的感觉类似于一个经典的箱子包装问题,但我不能确定它。感谢您的帮助 问题: 我有一套尺寸相同的产品,但有不同颜色的变体和不同数量的订单 我可以用任何组合包装,但我只能有规定数量的不同内容的盒子 我可以提供不同数量的每箱。最佳解决方案是发货数量最少且超过要求数量的产品 例如: 4个产品装在一个盒子里,我可以装两种不同的盒子,我需要装运100*红色,200*蓝色,300*绿色,400*黄色 我不能包装25盒红色、50盒蓝色、75盒绿色和100盒黄色,因为我只允许包装2种不同的独特内容,这将

我有一个挠头的感觉类似于一个经典的箱子包装问题,但我不能确定它。感谢您的帮助

问题:

我有一套尺寸相同的产品,但有不同颜色的变体和不同数量的订单

我可以用任何组合包装,但我只能有规定数量的不同内容的盒子

我可以提供不同数量的每箱。最佳解决方案是发货数量最少且超过要求数量的产品

例如: 4个产品装在一个盒子里,我可以装两种不同的盒子,我需要装运100*红色,200*蓝色,300*绿色,400*黄色

我不能包装25盒红色、50盒蓝色、75盒绿色和100盒黄色,因为我只允许包装2种不同的独特内容,这将是4种

因此,最佳解决方案是:

100盒1*红色、2*蓝色和1*黄色

150盒2*绿色和2*黄色

在这个例子中,我已经完全满足了我的所有数量,所以没有浪费


假设订单只需要395个黄色;上述溶液将浪费5个黄色,但没有一种溶液浪费更少。废物最少的解决方案是最好的。

注意:不是算法答案

使用暴力

给定类型,您可以(相当)轻松地检查您将得到多少浪费

由于在每种类型中,您只能有4个项目,并且只有两种类型,因此这里的不同选项数为
(4^4)^2
(基于
x=number\u颜色
y=number\u项目数
z=number\u类型
,我们有
(x^y)^z

那么为什么不检查所有65536个选项呢?大多数都很容易被取消资格(每种颜色都必须至少代表一次,等等)


编辑:由于实际问题的数量远远大于示例,因此此答案不再相关。我把它留在这里,以防有更好的想法出现。

你能告诉我们你感兴趣的问题参数的实际规模吗?继续@Davidisenstat的问题,你是在寻找一个最佳解决方案,还是一个“足够好”的解决方案,更容易编写\运行更快?@Davidisenstat数量级是产品的最大100个变种,数量高达1000000个,盒子适合100个产品。@shapiro.yaacov这是一个好问题-如果一个解决方案能够快速运行并产生最佳结果,这显然是可取的,但如果它不可行,那么首先会有利于更可能是好的解决方案,这样例行程序就可以提前停止,并有很好的机会找到一个非常好的解决方案。但仍然只有两种类型?或者这种情况也会改变吗?此外,我们是否必须在每个框中放入最多数量的产品,或者可以少放一些?正如我在编辑部分中所写,我们必须在大致相同的时间点击return!