2010-05-09 170 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