【发布时间】:2013-12-27 22:21:17
【问题描述】:
对不起,如果这个问题已经得到解答,但我对算法没有深入的了解,也并不总是注意到算法的不同专业之间的微妙之处。我有(我认为是)01-Knapsack 问题的一个轻微变体。我有一个最大重量为 W 的背包,有 N 个重量为 w 且值为 v 的物品可供选择。我想要做的是在不超过 W 的情况下最大化总价值 V。
经典背包。
这里是转折:在这些项目中,我需要确保我有一定的数量(不是最多,而是准确金额)取自不同的类别。
假设我们有类别
- F - 食品
- T - 玩具
- C - 衣服
- M - 其他(F、T 或 C)
我要进行 2 天的旅行,所以我需要带 2 件食物、1 个逗孩子玩的玩具和 2 件衣服。作为一个踢球者,我可以多带一个 F、T 或 C 项目。请注意,每个项目都是独一无二的,只能包含一次。
从我发现的所有算法来看,它似乎是 01(唯一物品)和有界变体的混合体,尽管在经典的有界背包中,我们绑定了我们可以包含特定物品的次数 vs特定的类别
如果有人能指出正确的算法,我将不胜感激。以“正常”语言编写代码的加分点,如果实现允许我查看前 n 个最佳结果,则加分(你知道,如果最佳解决方案包括我真的无法忍受或拥有的玩具) 2 套相互冲突的服装)。
编辑:请注意,我最终希望能够进行更长时间的旅行,所以我打算总共带 8-10 件物品,类别最多可以有 250 件左右的物品(那个孩子的玩具太多了)。我可以做一些优化来减少每个类别中的一些项(我真的不打算穿丑陋的夏威夷衬衫),但我不能将其减少到足以产生直接蛮力的程度实施可行。
【问题讨论】:
-
如果我没看错的话,你有一个带有多个子背包问题的整体背包问题。听起来像优化算法方法可能会首先消除不可能的解决方案,因为您的解决方案空间非常小。
-
不考虑物理卷怎么办?
-
什么是 ILP 求解器?
-
什么是“普通”语言?
-
@user1146334 ILP = integer linear programming
标签: algorithm knapsack-problem