我有一个有趣的任务,我正在尝试寻找一种算法,甚至只是一些指针。最坏的情况是,我可能必须自己编写和实施它-最好的情况是,我需要对它的工作方式有一个体面的了解,以便可以智能地测试和审核供应商提供的罐装解决方案。
我已经做了很多搜索,但是到目前为止还没有找到任何东西。我很可能没有找出正确的搜索关键字。
完全简短的版本:从大小相同的矩形对象的不对称矩形网格中,找到适合边界框的最佳组,将其从集合中删除,然后重复进行,直到没有任何对象。
详细版本:有许多用于优化托盘层的工业应用程序(StackBuilder是一个开源示例)。我正在查看问题的另一端的特定应用程序-我需要查看已通过StackBuilder之类进行优化的托盘,并找到从中移除框的最快方法托盘,通过使用大型工具以固定的连续组形式一次拾取多个盒子。不允许一次捡起一个盒子,和/或尝试重新布置它们。
因此,在事先了解盒子的大小及其托盘模式的情况下,我需要找到适合特定边界框的该模式中最大的连续组,以及该组的位置和方向。然后从考虑中“删除”该组,找到下一个最佳组,依此类推,直到货盘层为空。
复杂因素: 1.我需要一个通用的解决方案,因为这需要跨多个千个不同尺寸/形状的盒子工作,每个盒子都有自己的优化托盘图案 2.对于算法找到的任何选择组,将其放在边界框内只是第一个选择标准。我还需要确保边界框不会与相邻的框重叠,并且我需要控制搜索方向-算法需要从外边缘向内进行选择,在中心选择组是不可行的 3.考虑到某些托盘模式的复杂性,当从托盘中取出几组箱子时,不可避免地会有一些剩下的必须选择“ solo”,因为它们不太适合尺寸最佳的选择组之一。因此,算法需要能够不断找到“剩下的最好的组”,而不仅仅是固定的组大小。 4.拾取组必须位于“ 2.5D”中-即X,Y和RZ。因此,二维位置,再加上围绕三维尺寸轴的旋转。
简化因素: 1.考虑到托盘模式正常工作的方式,任何组的“方向”都应该仅为0或90度(技术上也应为180度和270度,但是在我的情况下这是微不足道的)-因此,任何奇角度的解决方案都可以被故意拒绝 2.任何进货托盘将只具有单个尺寸的盒子来处理 3.预先知道进来的货盘箱尺寸和货盘样式 4.该算法仅需2D,即可处理托盘的单层-可以根据需要针对每一层进行迭代 5.查找选择组的“边界框”是一个简单的矩形 6.托盘上的盒子都是简单的矩形(从Z轴透视图看),可以这样处理。没有奇怪的形状。 Z轴尺寸将在此算法的外部处理