【问题标题】:3d bin packing algorithm [closed]3d bin 打包算法
【发布时间】:2009-10-13 22:20:33
【问题描述】:

我正在寻找任何 3d bin 打包算法的确定性实现,即将许多不同的小方体打包到一个或多个更大的方体中。解决方案可能与最佳解决方案有所不同。

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

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

【问题讨论】:

  • 您声称您正在寻找一种算法,但您随后列出了编程语言。您是在寻找通用算法还是实现?
  • 您想要最佳解决方案,还是非常好的解决方案?长方体都是一样的吗?当您说旋转时,您是指 90 度还是任何角度?
  • @Beta:如果他将长方体打包成长方体,那么除了 90 度的整数倍之外,肯定会导致次优解。
  • @Asaph:当然,不是!仅仅因为我提到“算法”并不意味着它是一项功课。
  • @Kinopiko 和 Mouk,尝试将 5 个单位正方形放入宽度为 2.708 的正方形中,然后再告诉我有关非 90 度角的信息。

标签: algorithm language-agnostic math bin-packing


【解决方案1】:

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

【讨论】:

  • 源或 c++ 应用程序是否可以在任何地方在线获得?
  • 这对于一个简单的解决方案很有用,但实际上并不能很好地工作。对于任何想要解释和帮助写作的人,我建议这本书:背包问题,Martello 和 Toth,ISBN:0471924202
  • 我在链接页面中找不到结果?这仍然是正确的网址吗?
  • @AmrElgarhy 从原始网址中的名称来看,我猜this 是同一篇论文。
【解决方案2】:

我将wknechtel/3d-bin-pack C 代码转换为 javascript。可以很容易地移植到 C#。

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

您可以从index.html 文件运行示例计算并查看生成的报告。 pack1.js 文件包含应用程序和算法。我不确定算法是如何工作的,但结果对于包装计算来说是令人满意的。

【讨论】:

    【解决方案3】:

    这个问题是 NP 难的。你最好的选择是一个近似算法(直到一个天才解决任何 NP 问题,或者一个非常幸运的人偶然发现了一个解决方案。)不幸的是,我不知道任何众所周知的近似算法来解决这个问题。

    【讨论】:

    • 在多项式时间内解决一个 NP 完全问题仍然不会为您提供 NP 难题的多项式解决方案:)
    • 对于小包裹来说,所需的时间并没有那么高。所以蛮力是相当多的在线购物发货的公平选择。
    • @ThomasRS 如果您愿意使用蛮力,您很可能会通过使用相应的 ILP 来表示问题并将其输入到 gurobi 之类的东西中,从而获得最大的收益。跨度>
    • 谢谢@idog,但是我已经编写了一个自定义实现,它做了一些特定于应用程序的优化,比如考虑多个相同大小的盒子等等。
    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 2010-09-13
    • 2010-10-25
    • 2015-06-06
    • 2011-11-02
    • 2011-03-29
    • 2016-09-21
    相关资源
    最近更新 更多