用多个背包和约束解决一种背包问题

时间:2016-09-19 09:36:34

标签: excel algorithm solver knapsack-problem operations-research

我有以下问题,我想用excel解算器或任何其他工具解决(欢迎任何建议),但我不想编写代码。

我有几件物品(约40件)放入几个背包(约5个)。 每个项目都有不同的重量,但每个背包都有相同的空间。

物品的重量总和远低于背包的容量。

我需要做的是将背包中的物品分配给所有这些物品,或多或少相同的重量。换句话说,减少方差。

有一个约束:有些物品不能放在一起。 我有一个列表(或邻接矩阵)的项目可以或不可以一起。

当然,一旦背包中的一件物品不能进入第二件物品(每件物品只有一件物品)。

我正在尝试使用excel求解器来解决这个问题,但是所有3个算法都表示他们找不到解决方案,但是手动我可以找到它们,所以我认为我没有正确配置。

无论如何,我只能在excel中配置有关权重的部分问题,但我无法设置有关项目之间不兼容问题的部分。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这比侧面约束更多multiprocessor scheduling而不是背包。

你可以试试这样一个天真的配方。对于每个项目,[背包的数量] 0-1变量指示项目所在的背包,以及这些变量总和为1的约束。目标是最小化背包中的最大总重量。对于不能组合在一起的每对项目,有[背包数量]约束条件,相应指标变量的总和小于或等于1.

这里有一个工作示例,有两个背包(A和B),三个项目(x,体重3; y,体重1;和z,体重4),以及一个冲突(x不能与y)。

minimize C
over 0-1 variables Ax, Ay, Az, Bx, By, Bz and real variable C
subject to
C >= 3*Ax + 1*Ay + 4*Az  # load in A
C >= 3*Bx + 1*By + 4*Bz  # load in B
Ax + Bx = 1  # one placement of x
Ay + By = 1  # one placement of y
Az + Bz = 1  # one placement of z
Ax + Ay <= 1  # conflict between x and y in A
Bx + By <= 1  # conflict between x and y in B

这个公式并不是最优的,因为没有对称性破坏 - 实质上,LP求解器的搜索树被复制的因子等于背包的排列数。这只有5个!但是,在最糟糕的情况下,这是120,所以可能没问题。要走的路可能是column generation,其主要问题恰好是用正确数量的背包覆盖物品,而子问题相当于包装一个受限制的背包,但这超出了Excel的范围。