具有非相邻单元约束的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都为01的最优解。

这是我的电子表格布局

在这里输入图像描述

请注意,最好使用不同的颜色来区分variables(绿色),约束(红色)和数据(蓝色)。 我也用绿色字体标记客观单元格。

这里是公式

在这里输入图像描述

这里是求解器模型

在这里输入图像描述

解答

在这里输入图像描述

请注意,matrix完全单模的事实是保证最优解具有二元值。 一般来说,这是不正确的,我们需要将variables定义为二进制,并使用分支和边界 。

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