装箱目标函数
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算法及用人工蜂群算法改进