我想知道如何对以下优化问题进行分类。
木材厂出售各种库存长度的 2x4 木材。例如,8 英尺可能是 3 美元,10 英尺可能是 4 美元,而 14 英尺可能是 5.50 美元。重要的是,长度与价格不是线性相关的,并非所有离散长度都可以作为库存购买。可以假设在这些离散长度中可用的库存单位是取之不尽的。
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 英尺的板并分配为 {6ft} 和 {2ft, 0.0104ft, 2.5ft},成本为 6 美元。)
这似乎不是一个背包级问题。这似乎不是一个裁减库存问题(因为我想尽量减少成本而不是尽量减少浪费)。这是什么类型的问题,我该如何有效地解决它?
(作为后记,这是一个非虚构的问题,我已经在 Haskell 中使用多集分区和迭代以明显、低效的方式解决了。运行时对于超过 23 个所需长度和 6 个可用库存大小的实际使用来说是禁止的。 )