我被要求为我的学校开发一个简单的软件,用于制造环境。
这是情景:
我给出了一个尺寸列表 - 每个尺寸反映了一块板,所以例如我有一个24“x 30”板,30“x 30”,30“x 48”等等。这些板是切割原材料的过程的副产品。
原材料有两种不同类型的尺寸为60“x 120”和48“x 96”的纸板。
他们希望了解从原材料中切割木板的最佳方法 - “最佳”方式被定义为原材料和残留物含量最少的方式。他们还想知道将要使用的原材料的数量,例如30个60“x 120”的板和3个48“x 96”的板。
它们可以水平或垂直切割任何板,这意味着24“x 30”可以切割为24“x 30”或30“x 24”。
如果我总共给出50块板(可能是相同的尺寸),我可以有2 ^ 50种不同的组合 - 这对我来说似乎太长了,因为它们将在数千个不同的板上运行软件大小。
我想知道是否有人知道可能适合这种情况的算法。
谢谢!
答案 0 :(得分:3)
矩形2D切割的经典简单算法&包装问题是Wang's algoritm
然而,纯王的算法能够产生最佳的断头台切割图案,即所有切口从剩余材料的一个边缘一直行进到相对边缘的图案。它不能产生如下的非断头台模式
+---------+---+
| | |
+---+-----+ |
| | | |
| | | |
| +-----+---+
| | |
+---+---------+
然而,对于许多应用来说,断头台切割模式被认为是足够好的。所以,您可能想要考虑该算法(因为它非常简单)。
还有基于模拟退火技术的近似随机算法(详细描述可以在Simulated Annealing for VLSI Design书中找到(在网上找不到),它们能够产生非断头台模式。 / p>
在任何情况下,找到这种问题的精确解决方案通常需要大量的计算来生成和分析各种可能的变体,这使得在大多数情况下这是不切实际的。大多数时候,人们更喜欢坚持使用良好的近似/启发式算法,这种算法的工作速度要快得多。 Wang的算法可以通过多个启发式过滤器进行定制,从而加快搜索速度(冒着失去最佳解决方案并将其替换为“几乎”最佳解决方案的风险)。
答案 1 :(得分:0)
首先想到的是,你可以使用Bin Packing算法打包从一块给定的原材料中获得多块板。
您也可以尝试使用Genetic Algorithm来搜索最佳切割模式。 GA可能(也可能不会)与Bin Packing算法一样有效,但是您可以在GA上规定运行时间,例如,在一定时间后选择最佳解决方案。
尽管如此,我认为工厂倾向于使用相同尺寸的材料进行批处理,因此在实际切割之前可能最好允许(可能是较慢的)装箱算法运行的地方。
答案 2 :(得分:0)
这是一个难题,它与cutting stock problem非常相似。另请参阅bin packing problem。