【发布时间】:2009-08-25 07:11:33
【问题描述】:
我在 Excel 中创建了一个模型以与 Solver 结合使用。它主要工作。唯一的问题是 Solver 并没有真正将受约束的单元格正确地处理为二进制。找到解决方案后,其中一些数字实际上是 0.9999996、1.0000000003、0.0000017 等等。
我在 Mac OS X 上使用 Excel 2004。有什么想法吗?
【问题讨论】:
我在 Excel 中创建了一个模型以与 Solver 结合使用。它主要工作。唯一的问题是 Solver 并没有真正将受约束的单元格正确地处理为二进制。找到解决方案后,其中一些数字实际上是 0.9999996、1.0000000003、0.0000017 等等。
我在 Mac OS X 上使用 Excel 2004。有什么想法吗?
【问题讨论】:
如果二进制值远离 0 或 1,您可能必须转到 Solver 窗口中的选项并检查是否选中了“忽略整数约束”框。
【讨论】:
由于计算机的有限精度和优化算法的性质,求解器具有内置的容差。我会尝试选择“求解器参数”对话框上的“选项”按钮,然后增加精度(例如从默认值 0.000001为 0.00000001)。我不确定这是否可行,但值得一试。
我的公司制造了一款与 Excel 挂钩的商业级求解器,名为 What'sBest。如果上述方法不起作用,您可以考虑。您可以在 www.lindo.com 找到更多信息
【讨论】:
如果求解器无法在允许的时间范围或迭代次数内找到解决方案(或者如果没有可能的正确答案),它将不会返回二进制答案。
一种可能的解决方法是设置几个单元格(可能您正在计算的单元格中具有最小值的那些)具有约束<=1 和>=0 而不是二进制。您提供的图片没有显示出来,所以我不确定您要的是什么。
(为未设置为二进制的单元格设置一个带有 sumproduct 的单元格可能会有所帮助;见下文。)
例如,如果您尝试解决总共 22 个问题(没有解决方案),您可以从:
9 1
9 1
9 1
6 1
3 1
如果您将第二列中的所有值设置为二进制,您最终会得到:
9 0.5625
9 0.5625
9 0.5625
6 0.708333333
3 0.854166667
如果您将前 3 个设置为二进制,后两个设置为 <=1 和 >=0,您最终会得到:
9 0
9 1
9 1
6 0.333333333
3 0.666666667
最后两行的 sumproduct = 4,然后您可以使用它手动将最后两行之一设置为 1,另一个设置为 0,具体取决于您想要的答案略低于还是高于目标。
【讨论】:
我遇到了类似的问题,可以通过转到求解器选项然后选中“使用自动缩放”来解决它。我不确定这是否会解决您的问题,但值得一试。
【讨论】:
可能不是您的问题,但请注意选项中有一个 Ignore Integer Constraints 复选框,在 Excel 求解器中默认选中该复选框。至少在我的 Excel 2011 for Mac 副本中是这种情况。
【讨论】:
我遇到了同样的事情,取消选中 Ignore Integer Constraints 框为我解决了这个问题。
【讨论】: