Microsoft Solver Foundation约束

时间:2010-05-09 22:06:15

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

我正在尝试使用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 + b a&lt; = someValue形式的一些约束,所以如果我最终愿意做的话不支持,请提前告诉我。如果是这种情况,我也会感谢一些其他解决方案的建议,我可以使用.NET友好界面(请使用知名的商业软件包)。

提前致谢

2 个答案:

答案 0 :(得分:3)

我认为您需要在约束中使用它们之前将决策添加到模型中。如果您在创建决策后添加此行,则代码适用于我:

model.AddDecisions(decisionA, decisionB, decisionC);

答案 1 :(得分: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

企业版可能会花费** - 如果你有“学术企业”,它仍然没有Gurobi求解器,所以在考虑从你的资金中分离之前,最好向他们发送具体问题(http://gurobi.com/)如果他们说会处理它,但要求保证,但要求保证。