Algorithm 三维装箱算法

Algorithm 三维装箱算法,algorithm,Algorithm,有人知道3D装箱算法吗?我知道LAFF(大面积适合第一);然而,我需要一个约束条件是托盘具有固定的宽度和长度(高度是有限的)。在LAFF实现中,它搜索框并找到长度和高度的最大值,然后将其作为固定托盘 断头台切割启发法(参见示例)不精确但快速-当您向容器中添加一个盒子时,容器被拆分为三个不相交的子容器,例如,如果您有一个12x12x12容器并添加了一个8x8x88盒子,那么您将剩下一个12x12x4容器、一个12x8x4容器和一个8x8x4容器。这种不精确性是由于这样一个事实,即存在一些合法的(根

有人知道3D装箱算法吗?我知道LAFF(大面积适合第一);然而,我需要一个约束条件是托盘具有固定的宽度和长度(高度是有限的)。在LAFF实现中,它搜索框并找到长度和高度的最大值,然后将其作为固定托盘


断头台切割启发法(参见示例)不精确但快速-当您向容器中添加一个盒子时,容器被拆分为三个不相交的子容器,例如,如果您有一个12x12x12容器并添加了一个8x8x88盒子,那么您将剩下一个12x12x4容器、一个12x8x4容器和一个8x8x4容器。这种不精确性是由于这样一个事实,即存在一些合法的(根据物理定律)包装,而这种空间分割是不允许的(例如,如果您有一个12x12x12容器和四个12x8x4盒子,那么断头台切割会分割容器,这样您只能装入其中三个12x8x4盒子)

我在实现此功能时使用了一种随机最佳拟合递减算法-首先按体积按降序排序,然后按周长按升序排序(因此,更多类似立方体的长方体将首先排序,例如,8x88长方体将位于4x816长方体之前)。然后,我通过将排序键分配给每个等于Random.nextFloat(1.0/(itemIndex+1))的框来随机化此框队列,例如,第一个框的排序键介于0和1.0之间,第二个框的排序键介于0和0.5之间,同样,在插入一个盒子后对容器进行分区时,我倾向于将容器分成大小大致相同的子容器(即周长最小的分区),但包含一个随机元素,以便分区者偶尔会生成一个大的子容器和两个小的子容器

然后我并行运行了十几次,并选择了最佳结果。但是请注意,我的任务只是提出一个估计器——算法的一致性和快速性比精确性更重要


我考虑的一个更复杂但更精确的算法是。我选择了断头台切割算法,因为它更快,更容易实现/维护。

没有什么可以阻止您使用固定xy维度和无限z维度的LAFF。LAFF在2D中逐级拟合长方体,使其变为3D


我已经创建了一个可以修改的容器,或者使用当前代码运行,只需将容器高度设置为Integer.MAX_值。计算机中的无限实际上不是无限的;)

@ThomasRS不幸的是,当我编写代码时,我所在的公司决定将其私有化