我正在寻找任何 3d bin 打包算法的确定性实现,即将许多不同的小方体打包到一个或多个更大的长方体中。解决方案可能与最佳解决方案不同。
它应该用 C、C++、Java、C#、IronPython、IronRuby 或任何其他可以从 .Net 代码中提取的语言编写。
我找到了这个 C 算法http://www.diku.dk/hjemmesider/ansatte/pisinger/3dbpp.c,但它不会旋转长方体来找到最合适的。我可以不将它们倒置旋转,但水平旋转应该是可能的。
我正在寻找任何 3d bin 打包算法的确定性实现,即将许多不同的小方体打包到一个或多个更大的长方体中。解决方案可能与最佳解决方案不同。
它应该用 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 问题,或者一个非常幸运的人偶然发现了一个解决方案。)不幸的是,我不知道这个问题的任何众所周知的近似算法。