等排空处理算法



我正在处理一个类似于Bin包装问题的问题。

问题

我有几个箱子。每个箱子包含几个重量相同的物品(例如1、2、5、10公斤)。每个垃圾箱中的物品数量不同。我必须实现一种算法,该算法计算应该分配的物品数量,以达到一定的重量,这样在更多的操作过程中,箱子将大致同时清空。

示例

  1. B1有50个项目,重量为1公斤
  2. B2有90个项目,重量为2公斤
  3. B3有80个项目,重量为5Kg
  4. B4有50件物品,重量为10公斤

算法应计算出应处理的物品数量,以达到45公斤。算法应返回类似于以下内容的结果:10*B1+3*B3+1*B4=45公斤

我想知道是否有任何已知的算法可以用来解决我的问题。我已经有了一个算法,它可以计算分配预期重量所需物品所需的所有排列,但我有问题要弄清楚,我应该根据每个箱子中物品的可用性选择哪种排列。

您可以将问题分解为一系列大小相等的箱子包装问题,方法是首先只考虑物品比最小箱子多的箱子,然后重复此操作,直到所有箱子的大小都相同。

因此,使用已知的(wikipedia文章)bin打包算法对上述精简的bin集进行打包。

我不认为bin打包算法是解决我的问题的最佳方案。我实现了最适合的装箱算法。首先,我根据可用项目对数据进行降序排序。我遍历所有项目,直到我有了解决方案,或者项目列表为空(找不到解决方案)。对于以下情况,算法找不到有效的解决方案:

  • B1 40个项目,重量为100
  • B2重量为50的30个项目
  • B3 20个有重量的项目20

对于权重350,算法没有找到任何有效的结果。

结果1(340)100 50 20 100 50 20结果2(340)100 50 20 100 50 20….

最新更新