3d bin打包算法

时间:2009-10-13 22:20:34

标签: algorithm language-agnostic math bin-packing

我正在寻找任何3d bin打包算法的确定性实现,即用于在一个或多个较大的内容中包装许多小的和不同的长方体。解决方案可能与最佳解决方案不同。

它应该用C,C ++,Java,C#,IronPython,IronRuby或任何其他可以从.Net代码中存储的语言编写。

我发现了这个C算法http://www.diku.dk/hjemmesider/ansatte/pisinger/3dbpp.c,但它不会旋转长方体以找到最合适的算法。我没有把它们颠倒过来,但水平旋转应该是可能的。

6 个答案:

答案 0 :(得分:8)

我已经为你描述的情况编写了一个近似算法,即用C ++进行正交旋转的3D矩形框。 您可以在已发表的论文中找到结果和算法: http://www.cs.ukzn.ac.za/publications/erick_dube_507-034.pdf

答案 1 :(得分:2)

我将wknechtel/3d-bin-pack C代码转换为javascript。可以轻松移植到C#。

https://github.com/keremdemirer/3dbinpackingjs

您可以从Exception in thread "main" java.util.NoSuchElementException: No tags with key = SRF2 Key at it.tidalwave.imageio.raw.Directory.getInteger(Directory.java:587) at it.tidalwave.imageio.srf.SonySRFMakerNoteSupport.getSRF2Key(SonySRFMakerNoteSupport.java:34) at it.tidalwave.imageio.srf.SonyMakerNote.loadAll(SonyMakerNote.java:120) at it.tidalwave.imageio.tiff.TIFFImageReaderSupport.processMakerNote(TIFFImageReaderSupport.java:447) at it.tidalwave.imageio.tiff.TIFFImageReaderSupport.processEXIFAndMakerNote(TIFFImageReaderSupport.java:404) at it.tidalwave.imageio.tiff.TIFFImageReaderSupport.processMetadata(TIFFImageReaderSupport.java:380) at it.tidalwave.imageio.raw.RAWImageReaderSupport.loadMetadata(RAWImageReaderSupport.java:591) at it.tidalwave.imageio.raw.RAWImageReaderSupport.ensureMetadataIsLoaded(RAWImageReaderSupport.java:520) at it.tidalwave.imageio.tiff.TIFFImageReaderSupport.loadImage(TIFFImageReaderSupport.java:186) at it.tidalwave.imageio.raw.RAWImageReaderSupport.read(RAWImageReaderSupport.java:131) at javax.imageio.ImageIO.read(Unknown Source) at javax.imageio.ImageIO.read(Unknown Source) at test3.main(test3.java:42) 文件运行示例计算并查看生成的报告。 index.html文件包含应用和算法。我不确定该算法是如何工作的,但结果令人满意的包装计算。

答案 2 :(得分:1)

这个问题是NP难的。你最好的选择是一个近似算法(直到一个天才的人解决任何NP问题,或者一个非常幸运的人在一个解决方案中遇到困难。)不幸的是,我不知道任何熟知的近似算法。

答案 3 :(得分:1)

支持最大区域匹配的开源Java项目:here

以2D或3D旋转。

答案 4 :(得分:0)

该问题的一般版本在 “三维装箱问题的通用和机器人可包装变体算法:http://www.3dbinbox.com/Public/home/

答案 5 :(得分:0)

您可以看看我对此算法的近似值。

这是一种基于最大区域覆盖率的智能首选算法。

https://github.com/mohitesh07/3d-bin-packing

它是用Java编写的