具有非相邻单元约束的Excel求解器?
我是一名Excel解决scheme的新手,刚刚拿到一本数据科学书籍后才知道。 我想更熟悉这个工具,所以我一直在努力解决不同的问题。 我被困在一个虽然,我甚至不知道是否有可能使用求解器? 基本上,我需要检查的约束是两个单元格是否相邻。
我的问题:我有一堆包含不同数量的弹珠的袋子。 我想通过挑选手袋来获得最大数量的弹珠,但是它们不能相互靠近。
这是我在电子表格中的内容:
- 价值=包里弹珠的数量
- select=是否select包(二进制)
- 违规=(select*袋编号)袋1 – (select*袋编号)袋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 | | | +------------+----+----+----+---+---+-------------+
最佳解决scheme:
+------------+----+----+----+---+---+-------------+ | 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 | | | +------------+----+----+----+---+---+-------------+
我尝试了几个约束的组合:
- 在select行上放置一个二元约束
- 违规> = 0和违规<= – 2
- 总目标值<=总可能值(150)
我为自己解决了这个问题。 这是否可行?
是的,这个问题是很好的。
我会build议一种不同的方式来制定邻接限制。 特别是,我会使用以下内容:
choose_1 + choose_2 <= 1 choose_2 + choose_3 <= 1 choose_3 + choose_4 <= 1 choose_4 + choose_5 <= 1
这些表明最多可以select(1,2), (2,3), (3,4)
和(4,5)
每一对中的一个。 它具有不利用袋号的优点,其一般可以是袋名(即,string而不是数字)。 它还有另一个好处:我们不需要将variables定义为二进制,而只是连续的,在0和1之间: 0 <= choose_i <= 1
,对于所有的i = 1,...,5
。 这是因为由此产生的约束matrix是完全单模的 ,这意味着求解二元问题的线性规划松弛给出了其中choose_i
都为0
或1
的最优解。
这是我的电子表格布局 :
请注意,最好使用不同的颜色来区分variables(绿色),约束(红色)和数据(蓝色)。 我也用绿色字体标记客观单元格。
这里是公式 :
这里是求解器模型 :
解答 :
请注意,matrix完全单模的事实是保证最优解具有二元值。 一般来说,这是不正确的,我们需要将variables定义为二进制,并使用分支和边界 。
我希望这有帮助。 快乐造型!