【问题标题】:Excel Solver - Prevent Identically Named ResultsExcel Solver - 防止同名结果
【发布时间】:2017-01-15 03:43:09
【问题描述】:

这可能听起来有点奇怪,也许我只是在这个问题上错过了森林,但是有没有办法强制 Excel 求解器只返回一个结果实例?作为一个简短的示例,假设我们对各种对象(颜色、动物和形状)的可爱度有一些结果。我们希望求解器从这个列表中返回三个最喜欢的对象。

红色 (400) 狗 (120) 圆 (100) 红色 (400) 猫 (90) 广场 (75) 蓝色 (90) 马 (60) 三角形 (70) 绿色 (80) 蛇 (30) 矩形 (40) 黄色 (40) 兔子 (20) 五角大楼 (15)

当然,在这个例子中问题被简化了。基本上,我的问题在于我想要每种类型中的一种,即 Red、Dog 和 Circle,但我不断得到 Red、Red(再次)和 Dog,因为总数更高。我想定义一种方法来防止 Solver 返回两个同名的值。我似乎无法弄清楚,而且 Google 似乎也没有产生任何可行的回应。

【问题讨论】:

  • 找到三个最喜欢的(每个类别中的一个)似乎是一个排序问题而不是优化问题——所以我不确定求解器是如何相关的。无论如何,如果您有多个对应于Red(或更广泛的类别,如颜色)的单元格 - 引入新的二元决策变量,这些变量对应于选择该对象并将它们的总和限制为
  • 不清楚您的数据中是否有结构 - 例如Red-Dog-Circle 是记录(行),还是只是 Red?

标签: excel solver


【解决方案1】:

尚不清楚您的数据是如何设置的,这可能会影响您设置 Solver 问题的方式,但这里有一种方法(注意 - 此方法仅在您有 200 个或更少的值可供选择时才有效)。

  1. 为“类别”创建 A 列。这将具有“颜色”、“动物”和“形状”等值。
  2. B 列将用于“类型”,并包含您提供的信息。 (例如 Dog、Cat、... Red、Blue、... Circle、Square、...)
  3. C 列是 B 列中显示的类型的值或分数,也是您提供的信息。
  4. D 列包含 Solver 将处理的字段,我们称其为“已选择”。选择将是 0 或 1。
  5. E列是选择结果,简单计算,=C2*D2,填下。
  6. 将单元格 H2 设为 E 列的总和。这将是 Solver 的目标。
  7. 将 G3 到 G5 设为“类别”(颜色、动物、形状)中的值。
  8. 将 H3 到 H5 设为每个类别中的总选定值。填写的是=SUMIF($A$2:$A$16,"="&G3,$D$2:$D$16)

工作簿看起来像这样......

... 从此,您可以使用以下命令设置 Solver ...

  1. 设置目标:是$H$2
  2. 至:设置为最大。 (即您正在寻找最喜欢的)
  3. 通过更改可变单元格:设置为 $D$2:$D$16
  4. 受约束:有四个条目。 $D$2:$D$16 = binary; $H$3 = 1; $H$4 = 1; $H$5 = 1
  5. 选择求解方法:设置为进化。您可以使用 GRG Nonlinear,但需要更长的时间。

对话框如下所示...

...具有以下结果,符合您的条件...

【讨论】:

  • 你的回答让我非常接近,谢谢你!我的数据几乎完全按照您的格式进行格式化,这也让我很高兴。原始帖子中可能没有明确说明的一个小皱纹,如果在两个“类别”中多次使用“类型”但我只想要一个“类型”作为响应怎么办?可以这样想,橙色可以是“颜色”(值 150),(虽然未在原始示例中显示)可以是“水果”类别(值 130)。但是,我只想要颜色的答案,而不是水果的答案。
  • 另一个例子是这个;假设一个人在两个部门工作得很好,并且在每个部门都被评为顶级资源。但是,如果一个人只代表团队中的一个部门,我们只能组建一个所有部门平等代表的领导团队。尽管是每个部门的顶级资源,但我们如何强制 Solver 从其中一个部门获取第二好的资源?在此示例中,部门 = 类别,名称 = 类型。
  • 您可以使用 SUMIF 函数针对您选择的任何列创建约束。
  • 所以您是说在类型或名称列上使用 SUMIF?我是否正确地关注了你?
  • 是的。将“橙色”定义为您要约束的内容,并为“
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 2017-12-08
  • 2022-01-09
相关资源
最近更新 更多