我想知道如何对以下优化问题进行分类。
一个木材厂以不同的库存长度销售2x4。例如,8英尺可能是3美元,10英尺可能是4美元,而14英尺可能是5.5美元。重要的是,长度与价格没有线性关系,并且并非所有离散长度都可以作为库存购买。可以假设可用的库存单位在这些不连续的长度中取之不尽。
length cost
7.7ft $2.75
8ft $3.00
10ft $4.00
14ft $5.50
我需要通过从上面的库存切割它们来创建一组具有给定长度的2x4(假设我需要长度为2英尺,2.5英尺,6英尺一旦说完并完成)。此外,每次“切割”都会产生1/8“(即0.0104英尺)的材料成本。问题的解决方案是将每个所需长度分配给一个库存,使所有库存的总成本最小化。在此示例中,最小化成本的最佳解决方案是以5.50美元购买14英尺的电路板。(亚军解决方案是购买两个8英尺的电路板,分配为{6英尺}和{2英尺,0.0104英尺,2.5英尺},成本为6美元。)
它似乎不是一个背包级问题。它似乎不是一个切割库存问题(因为我想最大限度地降低成本而不是减少浪费)。这是一个什么样的问题,我怎样才能有效地解决它?
(作为后续注释,这是一个非虚构的问题,我在Haskell中使用多分区分区和迭代以明显,低效的方式解决了这个问题。运行时禁止实际使用,超过23个所需长度,6个可用库存量。)
答案 0 :(得分:1)
我认为这是一个切削库存问题,除了它是一个多目标或多标准的切削库存问题(您希望最大限度地降低货币成本和材料成本),请参阅此示例{{3} }。不幸的是,我发现这种切割库存问题的几乎所有在线资源都是付费墙背后的;另外,我几年没有做过任何整数线性规划,但如果我没记错的话,多目标问题比单目标问题困难得多。
一种选择是实现两遍算法。第一道次完全忽略了切割板材的材料成本,并且仅在单目标问题中使用货币成本(代替标准切割库存问题中的浪费)。这可能会为您留下无效的解决方案,此时您会执行this article来解决此问题。用14英尺的板子和8英尺的吟游诗人替换两个10英尺的板子,直到你找到一个有效的解决方案。找到有效的解决方案后,您可以继续本地搜索多次迭代,看看是否可以改进解决方案。与单程多目标解决方案相比,该算法可能是次优的,但它应该更容易实现。