具有多重约束的多维背包



我不确定我是否正确识别了问题,但阅读背包问题似乎最接近我试图解决的问题:

厨师有几种不同数量的食材。例如:

8个鸡蛋3根香肠500毫升牛奶12个草莓

有一个有限的食谱列表,每个食谱都包含不同数量的不同成分。配料的宇宙是有限的,所有食谱中每种配料的数量也是有限的。

每个食谱可能包含也可能不包含厨师所拥有的任何食材。

厨师希望尽可能地用完所有的食材,以尽量减少对一个食谱的浪费。

有一种情况是,厨师想在2到3个不同的食谱中使用所有食材,并尽量减少剩菜。

他的优化解决方案是什么?

编辑:我的问题是下面背包问题的一个更复杂的版本http://www.g12.cs.mu.oz.au/wiki/doku.php?id=simple_knapsack

如果我在你的Q中没有遗漏任何东西,这听起来不像背包问题。每个配方中每种成分的含量都是已知的所以你的插槽大小不是可变的。

如果我读对了你的Q,你所需要做的就是运行每个配方中的成分,看看数量是否足够,如果是,计算成分的价值被排除在外。最小值为这种积极的价值观就是你的答案。取θ(m*n)直接访问配料表的时间;n数字配料和食谱。

让我重写你的Q,看看我是否理解正确:你有一套食谱S,每个食谱都包含一份配料要求清单。厨师有一套配料,其中一些成分甚至可能为零。你想确定S的一个子集,这样S中的每个食谱都可以被厨师所拥有的食材所满足,同时最大限度地减少所谓的剩菜。

假设你有1个鸡蛋,5根香肠;两个食谱:A.鸡蛋炒E1S;B.巨型香肠-0E5S。因此可能的解决方案是{A}。{B} ,{A,B}。有了{A},剩下4根香肠;对于{B},只剩下1个鸡蛋,对于{A,B},这实际上是非法或不可行的解决方案。

我的问题是:你如何评价剩下的?如果禽流感流行,鸡蛋可能定价过高,{B}可能是首选。因此,可以通过对每种成分进行定价来定义一些wighted sum函数,比如f

如果你使用wighted sum,这可以被视为一个多维KP。这些项目是那些收据,有多个"指标",如配料1的数量(或长度)、配料2的数量(如宽度)。。。它们将被包装到一个碰巧有多个维度(长度、宽度…)的袋子中,因此可行的包装必须满足其对每个维度的限制,即配料k的总使用量必须小于厨师的总配料k。目标是最小化f(重量),或maxf-互联网的总价格,或简单地说是第一部分。

据我所知,只要维度的数量(在你的情况下,成分)不高,这个问题就可以解决。这有点像削减库存。

最新更新