装箱目标函数

Posted

技术标签:

【中文标题】装箱目标函数【英文标题】:Bin Packing Objective function 【发布时间】:2015-06-23 16:23:45 【问题描述】:

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

我正在尝试解决 3D 装箱问题,只有一个容器(背包),我对目标函数的制定有疑问。我有一个容器和一个包列表:

容器:

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

包装:

宽度 深度 身高 位置(X、Y、Z) 重量 位置因子

每个包裹都会有一个位置因子,它告诉我们您要在什么位置装载包裹,因子范围从 1 到 5,1 表示包裹应该放在容器的前面,5 表示应该放在容器的前面容器的背面。

现在我的目标函数是最大化集装箱上的空间,并且因素较大的包裹必须放在集装箱的后部,而因素较小的包裹必须放在卡车的前面。

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

我想通过排列成一行的相同大小的示例包来澄清一些事情

    后 5 1 5 4 4 4 3 3 2 2 前 背面 5 5 4 4 4 3 3 2 1 2 正面

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

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

【问题讨论】:

【参考方案1】:

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

由于装箱问题是 NP 难题,我想您将使用一些启发式方法来解决它。在这种情况下,候选解决方案由所有具有填充位置 (X,Y,Z) 属性的包 (P) 组成。目标函数如下:

F(P) -> int

因此,您可以按包装因子为其结果添加权重:据我所知,最佳布局是从 1 到 5 的排序因子。它与当前布局的区别在于您的系数(使用最小二乘):

ideal:   back 5 5 4 4 4 3 3 2 2 1 front
current: back 5 1 5 4 4 4 3 3 2 2 front 
coefficient: (5-5)^2 + (5-1)^2 + ... + (1-2)^2

【讨论】:

以上是关于装箱目标函数的主要内容,如果未能解决你的问题,请参考以下文章

Python实现二维装箱Bottom-Left算法及用人工蜂群算法改进

JAVA——装箱和拆箱

NPE,同时访问实例化和构造函数配置的不可变对象的原始类型(双精度)。 (不涉及自动装箱或反射)

F#中使用box和unbox函数进行装箱和拆箱操作

未装箱类型和严格性之间有啥关系?

FCL源码中数组类型的学习及排序函数Sort函数的分析