我正在寻找一个确定性的实现方式来实现任何3D装箱算法,即将许多小而不同的立方体放置在一个或多个更大的立方体中。解决方案可以与最优解有所不同。
它应该使用C、C++、Java、C#、IronPython、IronRuby或其他任何可以从.Net代码编译的语言编写。
我发现了这个C算法http://www.diku.dk/hjemmesider/ansatte/pisinger/3dbpp.c,但它没有旋转立方体以找到最佳匹配。我可以接受不将其倒置,但应支持水平旋转。
我正在寻找一个确定性的实现方式来实现任何3D装箱算法,即将许多小而不同的立方体放置在一个或多个更大的立方体中。解决方案可以与最优解有所不同。
它应该使用C、C++、Java、C#、IronPython、IronRuby或其他任何可以从.Net代码编译的语言编写。
我发现了这个C算法http://www.diku.dk/hjemmesider/ansatte/pisinger/3dbpp.c,但它没有旋转立方体以找到最佳匹配。我可以接受不将其倒置,但应支持水平旋转。
我已经用C ++为您描述的情况编写了一个近似算法,即3D矩形框,具有正交旋转。 您可以在已发布的论文中找到结果和算法: http://www.cs.ukzn.ac.za/publications/erick_dube_507-034.pdf
我将wknechtel/3d-bin-pack的C代码转换为JavaScript。可以轻松移植到C#。
https://github.com/keremdemirer/3dbinpackingjs
你可以从index.html
文件运行示例计算,并查看生成的报告。 pack1.js
文件包含应用程序和算法。我不确定算法是如何工作的,但对于包装计算来说,结果令人满意。这个问题是NP难的。你最好使用近似算法(直到某个天才解决了任何一个NP问题,或者一个非常幸运的家伙偶然发现了解决方案)。不幸的是,我不知道这个问题有什么著名的近似算法。