Algorithm 此几何(木工相关)程序的优化算法

Algorithm 此几何(木工相关)程序的优化算法,algorithm,Algorithm,正如标题所述,我的问题是寻找一个最优算法来解决我正在研究的问题。我只是在寻求见解/建议 这个问题是我叔叔向我提出的,他认为这对我来说既是一个很好的挑战,如果我能在移动平台上实现它,它也可能是一个有用的软件。 这是: “我正在使用已知标准尺寸(4'x 8'或5'x 5')的板材做一些木工工作。我有一份我需要的各种已知尺寸的木材的“切割清单”。我想能够做的是快速找出如何在尽可能少的浪费的情况下将板材分解成有用的碎片 另一个需要考虑的因素是锯条切口(或宽度)。例如,由于在进行三次切割时材料损失,您只能

正如标题所述,我的问题是寻找一个最优算法来解决我正在研究的问题。我只是在寻求见解/建议

这个问题是我叔叔向我提出的,他认为这对我来说既是一个很好的挑战,如果我能在移动平台上实现它,它也可能是一个有用的软件。 这是:

“我正在使用已知标准尺寸(4'x 8'或5'x 5')的板材做一些木工工作。我有一份我需要的各种已知尺寸的木材的“切割清单”。我想能够做的是快速找出如何在尽可能少的浪费的情况下将板材分解成有用的碎片

另一个需要考虑的因素是锯条切口(或宽度)。例如,由于在进行三次切割时材料损失,您只能从4'x 8'板材中获得三块2'x 4'板材(而不是四块)

我设想的是一个程序,在这个程序中,我可以输入板材尺寸、我正在使用的刀片的切口(它是可变的)、我想要的成品尺寸,并且该程序将生成切割模式的草图,从而最有效地减少浪费。”

现在我只是在写一个算法来找到一个最小浪费的解决方案。我将把它的实现放在Android上再过一天

就实际算法而言,我的想法如下:

  • 按降序排列“切割列表”
  • 将此列表中的第一项放置在图纸上,使其占据最左上方的可用位置
  • 如果列表中的当前项目无法放置在图纸上,请尝试放置下一个最大的项目
  • 如果剪切列表中的任何一块都不适合当前板材,则开始填充新板材
  • 重复此操作,直到切割列表为空
我还不熟悉算法的世界,所以这里的任何见解都是值得赞赏的

如果有什么不清楚的地方,请告诉我

谢谢,
KWarr

假设切口为
k
单位。然后以
k/2
单位移出每件的每一条边,并以
k/2
单位移出板材的每一条边。这将问题简化为老式的二维下料问题,正如评论者所指出的,这是NP完全问题。然而,如果你乐于将自己限制在一小部分或接受近似值


如果我是你,我会先实现一个愚蠢的贪婪算法,然后围绕这个算法构建应用程序。如果后来发现速度太慢或结果很差,请回来用更复杂的东西代替它。

我可以肯定地看到托盘装载问题与NP完全问题(也就是说,没有有效的精确解,尽管可能存在一些好的近似值)之间的某种关系。这是一个有趣的问题,但对于堆栈溢出来说,它似乎太宽了,更适合CompSci。我怀疑是否有一个简单的单通算法。我想你需要一些试穿/回溯来实现这一点。还有一点是,如果需要大量复杂的局部切割,那么完美的配合不一定是最好的答案;通常,一点废料比提取每一个可能的废料所需的工时要便宜(而且复杂的切割模式可能产生的不良切割风险也会增加)。当然,除非你有一台像CNC这样的机器来进行那些奇怪的切割……就像安迪格说的,这是一个超级典型的计算机科学问题,已经被研究了数千次。这是NP,但并不意味着无论如何都不可能运行,正如他所说,有一些启发式方法可以在更短的时间内近似计算结果。我敢打赌,你叔叔知道所有这些。这是2D还是2D取决于我们谈论的木材量。