我和我在大学的一些朋友被分配了一项实际任务,即开发一种网络应用程序,用于优化从某种材料切割矩形零件。像this列表中的应用程序,但更简单。基本上,如果互联网上有这种优化算法的源代码,我很感兴趣。我打算使用Adobe Flex框架开发应用程序。编程部分将在Actionscript 3,ofc中完成。但是,我怀疑这种语言有任何优化样本。可能有一些用于Java,C ++,C#,Ruby或Python以及其他更流行的语言(然后我只需要在AS中重写它)。所以,如果有人知道任何适合我的免费库或算法代码示例,我想听听你的建议。 :)
答案 0 :(得分:3)
这可能对您所需要的内容有些过分,但以下链接描述了一种为此类问题提供非常好结果的方法:
http://www.intechopen.com/articles/show/title/a_greedy_algorithm_with_forward-looking_strategy
没有可用的代码,但足够详细地描述了算法,它实现起来并不太难。我已经使用C#实现了这一点(对不起,无法共享该代码)并对结果非常满意。
答案 1 :(得分:1)
这听起来就像stock cutting problem 非常难!最好的解决方案是使用线性编程(通常基于单纯形法)和列生成(即使在数年之后约束解决研究项目我觉得无法给出一个不错的解释)。简而言之,您不希望在Actionscript中尝试这种方法;因此,无论你实施什么,除了小问题之外,你不应该期待任何其他方面的好结果。
我能提供的最佳建议是看你是否可以将源矩形切割成条带(每个所需的最大矩形的宽度),然后将每个条带的剩余部分细分为“头部”矩形已被删除。
我建议使用分支定界作为优化策略。 BnB通过进行详尽的树搜索来跟踪到目前为止看到的最佳解决方案。找到解决方案后,更新绑定并回溯以查找下一个解决方案。每当你知道你的搜索将你带到一个你知道无法找到比你找到的最佳解决方案更好的解决方案的分支时,你可以在那时提前回溯。
由于这些搜索树非常庞大,您可能希望在搜索上设置时间限制,然后尽快恢复。
希望这有帮助。
答案 2 :(得分:0)
当我想为我工作的woodwoorking公司做同样的事情时,我很难找到例子。问题本身是NP难的,因此您需要使用近似算法,如首次拟合或最佳拟合算法。 搜索2d bin-packing算法。我找到的那个,你将面板从最大到最小排序,然后按顺序添加到纸张中,放入适合的第一个纸槽。抱歉,无论如何都没有与我及其在vb.net中的代码。