1

我正在尝试使用 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();

请考虑我的实际模型在完成后应该包括一些约束,形式为 a a + b a <= someValue,所以如果我最终愿意做的事情不受支持,请提前告诉我。如果是这种情况,我也会感谢其他一些具有我可以使用的 .NET 友好界面的求解器的建议(请仅使用知名的商业软件包)。

提前致谢

4

2 回答 2

3

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

model.AddDecisions(decisionA, decisionB, decisionC);

弥敦道

于 2010-05-10T15:34:23.080 回答
1

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

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

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

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

Enterprise version might but it costs $$$$ - if you got "Academic Enterprise" it's still without Gurobi solver so before thinking about parting from your moneys it would be good to send them specific questions ( http://gurobi.com/ ) and ask for some guarantee in case they say it would handle it but it doesn't.

于 2010-08-02T08:44:23.987 回答