Algorithm 寻找关于理解特定组合优化问题的建议
给定一组项目(大小介于1到100之间)和多个箱子(1到15)。每个项目都有一个箱子子集,可以将项目分配给这些箱子,以及哪个箱子最好、哪个箱子次好等的优先顺序。项目也有一个自然顺序,下面用命名表示,例如,项目1在项目2之前。每个箱子的容量在1到5之间(每个物品的重量相同,即1) 一个示例输入可以是三个箱子和六个物品(-表示箱子不在物品的可用集合中,即不能与之打包): |bin1 bin2 bin3 | bin1 bin2 bin3 ------------------------ ---------------------------- 项目1 | 1 2-容量| 4 4 5 项目2 |-1 2 项目3 | 2 1 3 项目4 | 1 2 3 项目5 | 1-2 项目6 | 1 2 3 目标是(当发生冲突时,每个目标完全覆盖任何较低的目标,例如,无论使用了多少个箱子或忽略了首选项,打包五件物品总是比打包四件好):Algorithm 寻找关于理解特定组合优化问题的建议,algorithm,optimization,combinatorics,knapsack-problem,bin-packing,Algorithm,Optimization,Combinatorics,Knapsack Problem,Bin Packing,给定一组项目(大小介于1到100之间)和多个箱子(1到15)。每个项目都有一个箱子子集,可以将项目分配给这些箱子,以及哪个箱子最好、哪个箱子次好等的优先顺序。项目也有一个自然顺序,下面用命名表示,例如,项目1在项目2之前。每个箱子的容量在1到5之间(每个物品的重量相同,即1) 一个示例输入可以是三个箱子和六个物品(-表示箱子不在物品的可用集合中,即不能与之打包): |bin1 bin2 bin3 | bin1 bin2 bin3 ------------------------
如果是,请将此项目放入垃圾箱,并将替换的项目(如果有)放回不匹配的池中 您的问题与派驻服务匹配之间的区别在于,您不会预先修复bin的首选项。取而代之的是,您将使用一个规则,该规则优先选择使垃圾箱最接近100%满的项目
我唯一担心的是,这种修改可能会使算法不稳定。但这是一个如此简单的算法,可能值得尝试。这是一个二部匹配问题,可以在多项式时间内解决
假设有n个项目和b个箱子,每个箱子的大小为s。您添加的约束的顺序实际上大大简化了问题
他们的具体意思是,我们应该总是选择项目1,2,…,m作为最大的m。这个问题似乎很适合整数规划方案,因此,如果您的实例很小,最快的解决方案可能就是闭上眼睛,首先使用IP解算器。如果这还不能很快解决问题,你可以尝试使用更专业的算法。谢谢,这是一个很好的观点,只是为了以防万一。可以。在第二段中,您至少指定了三个不同的目标:1)最大化包装的物品数量,2)最大化箱子利用率,以及3)最小化使用的箱子数量。您可以对这些目标进行排序,也可以在它们之间进行权衡。你不能真的抛开三个可能相互冲突的目标,就这样算了。@Yuri:这当然是一个进步,但仍有差距。假设你有两种可能的方法 | bin1 bin2 bin3 ------------------------ item1 | x item2 | x item3 | x
f(i, j, 0) = max(f(i, j-1, k)) over all 0 <= k <= s
f(i, j, k > 0) = f(i-1, j, k-1) + q(i, j)
f(0, 0, 0) = 0
f(i, 0, k) = -infinity for all other i and k