Bin Packing目标功能

时间:2015-04-17 01:27:10

标签: algorithm knapsack-problem packing objective-function

首先,我想澄清一下,英语不是我的母语,所以请耐心等待一下:)

我试图解决3D装箱问题,只使用一个容器(背包),我对目标功能的制定有疑问。我有一个容器和一个包列表:

容器:

  • 宽度
  • 深度
  • 高度
  • 容量
  • 三维矩阵

包装:

  • 宽度
  • 深度
  • 高度
  • 位置(X,Y,Z)
  • 重量
  • 位置因素

每个包装都有一个位置因子,告诉我们您要加载包装的位置,因子范围从1到5,1表示包装应放在容器的前面,而5位于容器的后面。

现在我的目标功能是最大化容器上的空间,并且具有更大因子的包装必须位于容器的后部,并且具有较低系数的包装在卡车的前部。

如果我想最大化空间,我只需要最大化所有包volumnes的总和,但是我应该将它与目标函数的惩罚结合起来,例如,当一个因子为5的包时定位容器的前部。

我想用一行排列的相同大小的示例包来澄清一些内容

  1. 返回5 1 5 4 4 4 3 3 2 2前
  2. 返回5 5 4 4 4 3 3 2 1 2前
  3. 在第一个分发包中,您看到因子1的包几乎位于容器的后面,而在第二个分发中,因子为1的包位于靠近容器的位置 应该是(前面),所以第二次分发更好。

    问题是数据包的大小不同,可以放在任何位置。我希望你能帮助我:D!

1 个答案:

答案 0 :(得分:0)

一种特定形式的目标函数取决于求解方法。

由于垃圾箱包装问题是NP难问题,我猜你会用一些启发式来解决它。在这种情况下,候选解决方案被设置为具有填充的位置(X,Y,Z)属性的所有包(P)。目标函数看起来像:

numbers = [f(n) for n in numbers]

所以你可以通过包因子来增加权重:最好的布局是从我理解的1到5的排序因子。它与当前布局之间的差异是你的系数(使用最小二乘):

F({P}) -> int