我在 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框为我解决了这个问题。