【问题标题】:Microsoft Solver Foundation constraintMicrosoft Solver Foundation 约束
【发布时间】:2010-05-09 22:06:15
【问题描述】:

我正在尝试使用 Microsoft Solver Foundation 2 来解决一个相当复杂的情况,但是即使我尽可能地简化模型,我也会遇到 UnsupportedModelException。
有谁知道我做错了什么?
以下是重现问题行为所需的最少示例。

var ctx = SolverContext.GetContext();
var model = ctx.CreateModel();
var someConstant = 1337.0;

var decisionA = new Decision(Domain.Real, "decisionA");
var decisionB = new Decision(Domain.Real, "decisionB");
var decisionC = new Decision(Domain.Real, "decisionC");

model.AddConstraint("ca", decisionA <= someConstant);
model.AddConstraint("cb", decisionB <= someConstant);
model.AddConstraint("cc", decisionC <= someConstant);

model.AddConstraint("mainConstraint", Model.Equal(Model.Sum(Model.Abs(decisionA), decisionB, decisionC), someConstant))

model.AddDecisions(decisionA, decisionB, decisionC);

model.AddGoal("myComplicatedGoal", GoalKind.Minimize, decisionC);

var solution = ctx.Solve();

solution.GetReport().WriteTo(Console.Out);

Console.ReadKey();

请考虑一下,一旦完成,我的实际模型应该包括一些 aa+ba

提前致谢

【问题讨论】:

    标签: .net solver constraint-programming ms-solver-foundation


    【解决方案1】:

    我认为您需要先将决策添加到模型中,然后再在约束中使用它们。如果您在创建决策后添加此行,您的代码对我有用:

    model.AddDecisions(decisionA, decisionB, decisionC);
    

    内森

    【讨论】:

    • 我的错,你是完全正确的,但是一旦我尝试输入任何涉及乘法/求幂/决策绝对值的约束,我就会再次得到该异常。要重现该内容,您只需在 Model.Sum 调用中将 decisionA 替换为 Model.Abs(decisionA)。
    【解决方案2】:

    从此链接获取源并尝试(它有几个 Model.Abs)。如果它死了,那么您的设置有问题,最短的解决方案是卸载、重新启动并重新安装。

    http://geekswithblogs.net/cyoung/archive/2009/02/25/129672.aspx

    好的,既然你提到了二次约束,至少 Express 版本肯定不支持它们:

    http://code.msdn.microsoft.com/solverfoundation/Thread/View.aspx?ThreadId=2756

    企业版可能会,但它要花费 $$$$-如果您有“学术企业”,它仍然没有 Gurobi 求解器,因此在考虑放弃您的资金之前,最好向他们发送具体问题 (http://gurobi.com/) 并询问为了一些保证,以防他们说它会处理它但它没有。

    【讨论】:

    • 这段代码似乎工作正常,但不幸的是这并不能完全解决我的问题。我想我遇到的问题是在建模级别(看起来 SFS 无法解决我的问题,因为我已经制定了或者我没有以正确的方式使用它)。由于我要解决的问题需要二次约束 - 它已经是来自四次方程系统的问题的分解版本 - 我需要一种使用二次约束的方法或建模技巧。
    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多