具有非相邻单元格约束的Excel解算器?

时间:2014-07-24 23:32:17

标签: excel solver

我是Excel求解器的新手,只是在拿起数据科学书后才了解它。我想更熟悉这个工具,所以我一直在努力解决不同的问题。虽然我被困在一个,我甚至不确定是否可以使用求解器?基本上,我需要检查的约束是两个单元是否相邻。

我的问题:我有一堆包含不同数量弹珠的袋子。我想通过挑选袋子来最大化我获得的弹珠数量,但它们不能彼此相邻。

这就是我在电子表格中的内容:

  • 价值=袋中的弹珠数
  • 选择=是否选择行李(二进制)
  • Bag 2的违规=(选择*行李号) - (选择*行李号)Bag 2

如果我拿起两个相邻的行李,违规将= -1。

+------------+----+----+----+---+---+-------------+
| Bag Number | 1  | 2  | 3  | 4 | 5 | Total Value |
+------------+----+----+----+---+---+-------------+
| Value      | 10 | 20 | 30 | 40| 50|          150|
| Choose     |  0 |  0 |  0 | 0 | 0 |            0|
| Violation  |  0 |  0 |  0 | 0 |   |             |
+------------+----+----+----+---+---+-------------+

最佳解决方案:

+------------+----+----+----+---+---+-------------+
| Bag Number | 1  | 2  | 3  | 4 | 5 | Total Value |
+------------+----+----+----+---+---+-------------+
| Value      | 10 | 20 | 30 | 40| 50|          150|
| Choose     |  1 |  0 |  1 | 0 | 1 |           90|
| Violation  |  1 | -3 |  3 |-5 |   |             |
+------------+----+----+----+---+---+-------------+

我尝试了一些约束的组合:

  • 在选择行上设置二元约束
  • 违规> = 0和违规< = - 2
  • 总目标值< =总可能值(150)

我为自己解决了这个问题。这甚至可行吗?

1 个答案:

答案 0 :(得分:3)

是的,问题很明确。

我建议采用不同的方式来制定邻接约束。特别是,我会使用以下内容:

choose_1 + choose_2 <= 1
choose_2 + choose_3 <= 1
choose_3 + choose_4 <= 1
choose_4 + choose_5 <= 1

这表明每对(1,2), (2,3), (3,4)(4,5)中最多可以选择一个。它的优点是它不使用袋号,袋号通常可以是袋名(即字符串而不是数字)。它还有另一个好处:对于所有0 <= choose_i <= 1,我们不需要将变量定义为二进制,而只需将其定义为连续的0到1之间:i = 1,...,5。这是因为得到的约束矩阵是Totally Unimodular,这意味着求解二元问题的linear programming relaxation可以得到choose_i都是0或{{1的最优解。 1}}。

以下是电子表格布局

enter image description here

请注意,最好使用不同的颜色来区分变量(绿色),约束(红色)和数据(蓝色)。我还用绿色字体标记了目标单元格。

以下是公式

enter image description here

这是求解器模型

enter image description here

<强>解决方案

enter image description here

请注意,矩阵完全是单模的事实是guarantee,最优解将具有二进制值。通常情况并非如此,我们需要将变量定义为二进制并求助于branch and bound

我希望这会有所帮助。快乐的造型!