Algorithm 产品分箱算法

Algorithm 产品分箱算法,algorithm,Algorithm,我有产品和盒子。我想使用最小包装箱数。请忽略产品和包装箱尺寸(WxHxD)。只关注数量。 我需要一个算法来把这些产品放到盒子里。算法必须使用最小盒数和它能使用的最小盒数。算法可以使用同一个框多个。每种产品只能使用一次 我试过这个算法 按数量递增的订单产品 把最小的产品放到最大的盒子里,然后把下一个产品加到盒子里。直到没有空间放下一个。重复上述步骤,直到产品完成 根据该算法 E产品至Z-1盒(自由空间:2900 cm3) B产品至Z-1盒(自由空间:2700 cm3) F产品至Z-1盒(自

我有产品和盒子。我想使用最小包装箱数。请忽略产品和包装箱尺寸(WxHxD)。只关注数量。


我需要一个算法来把这些产品放到盒子里。算法必须使用最小盒数和它能使用的最小盒数。算法可以使用同一个框多个。每种产品只能使用一次

我试过这个算法

  • 按数量递增的订单产品
  • 把最小的产品放到最大的盒子里,然后把下一个产品加到盒子里。直到没有空间放下一个。重复上述步骤,直到产品完成
根据该算法

  • E产品至Z-1盒(自由空间:2900 cm3)
  • B产品至Z-1盒(自由空间:2700 cm3)
  • F产品至Z-1盒(自由空间:2300 cm3)
  • D产品至Z-1盒(自由空间:1700 cm3)
  • A产品到Z-1盒(可用空间:700 cm3)
  • B产品至Z-2盒(自由空间:1500 cm3)

所以算法使用了两个Z盒。但是人脑可以适应(C+A+F+E)=3000立方厘米(Z盒)和(B+D)=800立方厘米(X盒)
谢谢你的评论和回复。

我会计算出最佳的方法来将这些盒子放在一起

  • 一个Z等于一个V和一个X
  • 一个V等于两个X
  • 一个X等于两个U
  • 一个U最多等于五个T(必须能够将至少两个盒子合并为一个,以便任何盒子合并都有意义)
这一步在计算上可能相当昂贵,这取决于你有多少个盒子,以及你如何容易地把它们放在一起。IE:如果你的盒子大小不是普通的倍数,那么这就不那么简单和困难了。请参阅示例,了解真正“漂亮”的盒子大小组合的外观(您给出的示例非常漂亮)

将一个盒子中的所有产品移动到另一个盒子中,目标是尽可能接近0剩余空间,理想情况下,首先要寻找能够产生0剩余空间的移动(只需将所有东西都放在一个盒子中并移动到另一个盒子中)

然后根据上述规则尽可能多地合并框,只要它将框的#减少至少一个。例如:
CEF=>V
(从技术上讲,它应该是
E=>F
,然后是
EF=>C
),
A=>X,DB=>X
。然后你可以从那里把它组合起来
ADB=V
(将
2X
框组合成一个
V
框)


另一个有效选项是:
DF=>X,BCE=>V,A=>X
。在这种情况下,我们仍然将
两个X
组合成
V
。也有一些可能的解决方案,您可能有
1V
1Z
,但这只有在您有
1X
1V
时才有意义,否则最好使用
2X=>1V

您会为以下答案支付多少费用:

==========

Found the following best packing into 2 boxes after 10 trials:
  Box z with space 200.0 cm3 left contains product(s):
    D C E B F
  Box x with space 0.0 cm3 left contains product(s):
    A

END.
这个想法是从选择中进行有分量的选择

determineBox(listOfProducts) {
  create an empty list of boxes listOfBoxes
  VS = sum_of_volume(listOfProducts)
  If there is a box which volume is bigger than VS
    add the smallest box bigger than VS to listOfBoxes
  Else
    create an empty list newListOfProducts
    consider the biggest available box B
    add B to listOfBoxes
    until the sum_of_volume(listOfProducts) become smaller than the volume of B
      drop out of listOfProducts the smallest item
      and add it to newListOfProducts
    merge listOfBoxes with the result of the function determineBox(newListOfProducts)
  returns listOfBoxes
}
其思想是使用递归函数找到最小的框来存储最大的乘积。

对于剩余的产品,我们再次使用该功能。

总共有多少个箱子/产品?无限制。例如,产品计数可以是100,盒子类型只能是一个。请更好地指定问题。例如,一个盒子可以容纳多个产品吗?每个产品中有多少是你想要包装的?如果你忽略了尺寸,那么这只是一个普通的背包问题,afaict。“算法必须使用最小盒数和它能使用的最小盒数”您的意思是在考虑盒大小之前,盒数必须是最小的吗?因为您需要指定其中一个标准比另一个更重要。如果不是,考虑有1项A(1000)和1项E(100)的情况,它们可以被装入X和E中,对于2盒,总体积为1100,或者将它们都放在一个盒子V中,对于1个体积为2000的盒子。在许多情况下,这可能不产生最佳结果,但是关于拾取(或舍入)有一些要说的话。盒子大小(可能还有产品体积大小)可以产生最佳结果,否则,您可能无法在100多种产品的合理时间内获得最佳结果。