【发布时间】:2014-07-24 23:32:17
【问题描述】:
我是 Excel 求解器的新手,只是在拿起一本数据科学书籍后才了解它。我想更熟悉这个工具,所以我一直在尝试解决不同的问题。我被困在一个,我什至不确定是否可以使用求解器?基本上,我需要检查的约束是两个单元格是否相邻。
我的问题:我有一堆装有不同数量弹珠的袋子。我想通过捡袋子来最大化我得到的弹珠数量,但它们不能彼此相邻。
这是我在电子表格中的内容:
- 值 = 袋中弹珠的数量
- Choose = 是否选择包(二进制)
- 违规 = (Choose*Bag Number) of Bag 1 - (Choose*Bag Number) of 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 和违规
- 总目标值
我自己解决了这个问题。这甚至可行吗?
【问题讨论】: