繁体   English   中英

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

[英]Excel Solver with non-adjacent cell constraint?

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

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

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

  • 价值=袋子里的弹珠数量
  • 选择=是否选择包(二进制)
  • 袋子2的袋子1 - (选择*袋号)的违规=(选择*袋号)

如果我拿起两个相邻的行李,违规将= -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)

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

是的,问题很明显。

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

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都是01

这是我的电子表格布局

在此输入图像描述

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

以下是公式

在此输入图像描述

以下是求解器模型

在此输入图像描述

方案

在此输入图像描述

请注意,矩阵完全是单模的这一事实可以保证最优解具有二进制值。 一般情况下,这不是真的,我们需要将变量定义为二进制并求助于分支和绑定

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM