回溯的替代方案

时间:2013-10-29 00:16:51

标签: algorithm

我正在开发一个空间优化软件。它应该能够以最优的方式在较大的空间中安排小体积。有一些限制,例如一个体积不能移动或者应该“躺在”另一个体的内侧面上,或者它不能被另一个体积等等......

每个体积都表示为一个3d轴对齐的边界框,或一组较小的3d AABB(它们组合成一个更复杂的体积)。

我一直在考虑使用回溯来解决这个问题(特别是分支定界技术)但是它在速度方面太过贪婪,就像在内存方面一样(即使是过于简单的使用)。

有没有人知道一种适合这个问题的替代技术?

我不在乎......但我确信这些软件存在,所以有一种方法(我不知道)。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

是的,这个问题有“解决方案”,它们是大企业。很好地解决这个问题可以为你赚到很多钱,因为它是NP难的并且非常有用。 http://en.wikipedia.org/wiki/Bin_packing_problem

我的第一个想法是以离散的线性编程方式重新解决问题,这已经完成,如果您有权访问,请参阅下面的参考。

Mhand Hifi,Imed Kacem,Stephane Negre,Lei Wu(2010)“三维装箱问题的线性规划方法”离散数学电子笔记,36,993-1000

答案 1 :(得分:0)

如果你还没看过,我建议你看看动态编程方法。您的问题听起来类似于“Cutting Cloth”问题,这是典型的动态编程问题。这是切割布料的问题:

  

切布。给你一块长方形布   维度X Y,其中X和Y是正整数,以及列表   n可以用布料制作的产品。对于每种产品i 2 [1;   n]你知道需要一个尺寸为ai bi的矩形布   并且产品的最终售价是ci。假设   ai,bi和ci都是正整数。你有一台机器可以   将任何矩形布块水平切成两块   或垂直的。设计一种确定最佳回报的算法   X Y的布料,也就是切割布料的策略   由最终产品制成的产品给出了最大的总和   售价。您可以自由制作给定的副本   产品如您所愿,或者如果需要也不需要。

以下是我将切割布问题划分为子问题的方法:

V( i,j) = max { V(i - ai, j- bi ) + ci,
                V(i - bi, j - ai ) + ci
              }