[英]Excel Solver with non-adjacent cell constraint?
我是Excel求解器的新手,只是在拿起数据科学书后才了解它。 我想更熟悉这个工具,所以我一直在努力解决不同的问题。 虽然我被困在一个,我甚至不确定是否可以使用求解器? 基本上,我需要检查的约束是两个单元是否相邻。
我的问题:我有一堆包含不同数量的弹珠的袋子。 我想通过挑选袋子来最大化我获得的弹珠数量,但它们不能彼此相邻。
这就是我在电子表格中的内容:
如果我拿起两个相邻的行李,违规将= -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 | | |
+------------+----+----+----+---+---+-------------+
我尝试过一些约束的组合:
我为自己解决了这个问题。 这甚至可行吗?
是的,问题很明显。
我会建议一种不同的方式来制定邻接约束。 特别是,我会使用以下内容:
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到1: 0 <= choose_i <= 1
,对于所有i = 1,...,5
。 这是因为得到的约束矩阵是完全单模 ,这意味着求解二元问题的线性规划松弛给出了一个最优解,其中choose_i
都是0
或1
。
这是我的电子表格布局 :
请注意,最好使用不同的颜色来区分变量(绿色),约束(红色)和数据(蓝色)。 我还用绿色字体标记目标单元格。
以下是公式 :
以下是求解器模型 :
方案 :
请注意,矩阵完全是单模的这一事实可以保证最优解具有二进制值。 一般情况下,这不是真的,我们需要将变量定义为二进制并求助于分支和绑定 。
我希望这有帮助。 快乐的造型!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.