这种几何(木工相关)程序的最佳算法

时间:2014-03-19 04:51:25

标签: algorithm

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

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

"我正在使用已知标准尺寸(4'x 8'或5'x 5')的板材做一些木工工作。我有一份“切割清单”,其中包含我需要的各种已知尺寸的木材。我希望能够做的就是快速弄清楚如何尽可能地将单件货物分解成有用的碎片,并且尽可能少地浪费。

需要考虑的另一个因素是锯片切口(或宽度)。例如,由于在进行三次切割时材料丢失,您只能从4英尺x 8英尺的纸张中获得三个2英尺x 4英尺(而非四个)。

我想象的是一个程序,我可以输入纸张尺寸,我正在使用的刀片的切口(它的变量),我想要的成品尺寸,程序会产生一个粗略的图纸。削减模式,最有效地减少浪费。"

现在我正在编写一个算法来寻找一个浪费最少的解决方案。我将把它在Android上继续实施一天。

就实际算法而言,到目前为止我的想法是:

  • 订购"剪切列表"按降序排列
  • 将此列表中的第一项放在工作表上,使其占据最左侧最左侧的可用位置
  • 如果列表中的当前项目无法放在工作表上,请尝试放置下一个最大的
  • 如果切割清单中的所有部分都不适合当前工作表,请开始填写新工作表
  • 重复,直到切割清单为空

我还不熟悉算法世界,所以我们非常感谢任何见解!

如果有任何不清楚的地方,请告诉我。

谢谢, KWarr

1 个答案:

答案 0 :(得分:1)

假设切口为k个单位。然后按k/2单位移出每个部分的每个边缘,并将工作表的每个边缘移出k/2个单位。这减少了问题,因为老式的2D切割库存问题,正如评论者所指出的那样是NP完整的。但是,如果您乐意将自己限制在少数几件或接受近似值,there're a whole pile of algorithms that'll suit your needs

如果我是你,我首先实施一个愚蠢的贪婪算法并围绕它构建应用程序。如果它后来证明太慢或产生不良结果,请回来替换它更复杂的东西。