2010-05-09 161 views
1

我试图使用Microsoft Solver Foundation 2来解决一个相当复杂的情况,但是即使我尽可能愚蠢地模型化了一个UnsupportedModelException,我仍然坚持着。
有没有人有我做错什么的想法?
以下是重现问题行为所需的最少示例。Microsoft Solver Foundation约束

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一个< = someValue中,所以如果有什么我愿意做的,最终是不是支持,请提前告知我。如果是这种情况,我也会欣赏一些其他求解器的建议,我可以使用.NET友好的界面(请仅使用知名的商业软件包)。

在此先感谢

回答

1

抓住源头,并尝试(它有几个Model.Abs)。如果它死了,那么你的设置有问题,最短的解决方案是卸载,重新启动和重新安装。

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

好了,现在你提到的二次约束,至少快递版本绝对不到风度支持他们:

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

企业版本可能,但它的成本$$$$ - 如果你得到了“学术型企业”,它仍然没有Gurobi求解器,所以在考虑离开你的金钱之前,给他们发送具体问题(http://gurobi.com/)是很好的,并且要求一些保证,以防他们说它会处理它,但它不会。

+0

此代码似乎正常工作,但不幸的是,这并没有完全解决我的问题。我想我遇到的问题是在建模级别(看起来像SFS无法解决我的问题,因为我已经制定,或者我没有以正确的方式使用它)。由于我要解决的问题需要二次约束 - 它已经是来自四次方程系统的问题的分解版本 - 我需要一种使用二次约束或建模技巧的方法。 – em70 2010-08-02 21:09:33

1

我认为你需要你在限制使用它们之前决定要添加到模型。如果您在创建的代码对我的作品的决定后添加此行:从这个链接

model.AddDecisions(decisionA, decisionB, decisionC); 

弥敦道

+0

我的不好,你是完全正确的,但只要我尝试输入任何约束涉及乘法/指数/绝对值的决定,我再次得到这个异常。要重现此事,您可以在Model.Sum调用中用Model.Abs(decisionA)替换decisionA。 – em70 2010-05-10 17:37:56