【问题标题】:Is Microsoft Solver Foundation bugged?Microsoft Solver Foundation 是否存在漏洞?
【发布时间】:2012-06-26 15:43:45
【问题描述】:

我在尝试做另一件事时错误地写了这个不可行的oml。问题在于底部的约束是不可能的,因为右侧的最小值必须为零,左侧的最大值必须大于零(当然,除非我遗漏了一些东西)。

问题是,如果你运行它,MSF 会很乐意给你一个答案,而不是告诉你是不可行的。

string oml = @"
    Model[
        Decisions[Integers[0,Infinity], d1],
        Decisions[Integers[0,Infinity], d2],
        Decisions[Integers[0,Infinity], d3],
        Decisions[Integers[0,Infinity], d4],
        Decisions[Integers[0,Infinity], d5],
        Decisions[Integers[0,Infinity], d6],
        Decisions[Integers[0,Infinity], d7],
        Decisions[Integers[0,Infinity], d8],
        Decisions[Integers[0,Infinity], d9], 
        Decisions[Integers[0,Infinity], d10],
        Decisions[Integers[0,Infinity], d11],
        Decisions[Integers[0,Infinity], d12],
        Decisions[Integers[0,Infinity], d13],
        Decisions[Integers[0,Infinity], d14],
        Decisions[Integers[0,Infinity], d15],
        Decisions[Integers[0,Infinity], d16],
        Constraints[d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8 == 2],
        Constraints[d9 + d10 + d11 + d12 + d13 + d14 + d15 + d16 == 2],
        Constraints[d1 + d9 <= 1],
        Constraints[d2 + d10 <= 1],
        Constraints[d3 + d11 <= 1],
        Constraints[d4 + d12 <= 1],
        Constraints[d5 + d13 <= 1],
        Constraints[d6 + d14 <= 1],
        Constraints[d7 + d15 <= 1],
        Constraints[d8 + d16 <= 1],
        Constraints[Max[d1 * 1, d2 * 2, d3 * 3, d4 * 4, d5 * 1, d6 * 2, d7 * 3, d8 * 4] <= Min[d9 * 1, d10 * 2, d11 * 3, d12 * 4, d13 * 1, d14 * 2, d15 * 3, d16 * 4]]
    ]
";

SolverContext sc = SolverContext.GetContext();
sc.LoadModel(FileFormat.OML, new StringReader(oml));
var sol = sc.Solve();
Console.WriteLine(sol.GetReport());

编辑:

这是我的报告给我的:

===Solver Foundation Service Report===
Date: 6/26/2012 11:00:55 AM
Version: Microsoft Solver Foundation 3.0.1.10599 Express Edition
Model Name: DefaultModel
Capabilities Applied: CP
Solve Time (ms): 135
Total Time (ms): 338
Solve Completion Status: Feasible
Solver Selected: Microsoft.SolverFoundation.Solvers.ConstraintSystem
Directives:
Microsoft.SolverFoundation.Services.Directive
Algorithm: TreeSearch
Variable Selection: DomainOverWeightedDegree
Value Selection: ForwardOrder
Move Selection: Any
Backtrack Count: 0
===Solution Details===
Goals:

Decisions:
d1: 0
d2: 0
d3: 0
d4: 0
d5: 0
d6: 0
d7: 1
d8: 1
d9: 0
d10: 0
d11: 1
d12: 1
d13: 0
d14: 0
d15: 0
d16: 0

【问题讨论】:

  • 非建设性但有趣的地狱
  • 您使用的是哪个 MSF 版本?我在 MSF 3.1(构建 3.0.2.10889,64 位)中运行了您的代码,我得到了报告解决完成状态:不可行。选择求解器 ConstraintSystem,算法 TreeSearch.
  • 对于我们这些有点懒惰的人,您能否提供有关您认为最终约束检查应该处理的值的详细信息?
  • @Anders Gustafsson:我刚下载了 3.1,也变得不可行。我猜 3.0 只是被窃听了。

标签: c# ms-solver-foundation


【解决方案1】:

好像是版本问题。在 MSF 的最新版本(标准版)中运行相同的问题时,求解器将问题报告为不可行。除此之外,该报告列出了与上述 3.0 的报告相同的属性,只是没有列出决策值。

是的,MSF 3.0 中似乎存在某种错误。要克服这个错误,请尝试升级到最新的 MSF 版本 3.1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多