2012-06-26 38 views
2

我在試圖做另一件事時錯誤地寫了這個不可行的oml。有什麼不對的是,底部的約束是不可能的,因爲右邊的最小值必須爲零,而左邊的最大值必須大於零(除非我錯過了某些東西)。微軟解算器基金會是否被竊聽?

問題是,如果你運行它,MSF會樂意給你一個答案,而不是告訴你是不可行的。

string oml = @" 
    Model[ 
     Decisions[Integers[0,Infinity], d1], 
     Decisions[Integers[0,Infinity], d2], 
     Decisions[Integers[0,Infinity], d3], 
     Decisions[Integers[0,Infinity], d4], 
     Decisions[Integers[0,Infinity], d5], 
     Decisions[Integers[0,Infinity], d6], 
     Decisions[Integers[0,Infinity], d7], 
     Decisions[Integers[0,Infinity], d8], 
     Decisions[Integers[0,Infinity], d9], 
     Decisions[Integers[0,Infinity], d10], 
     Decisions[Integers[0,Infinity], d11], 
     Decisions[Integers[0,Infinity], d12], 
     Decisions[Integers[0,Infinity], d13], 
     Decisions[Integers[0,Infinity], d14], 
     Decisions[Integers[0,Infinity], d15], 
     Decisions[Integers[0,Infinity], d16], 
     Constraints[d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8 == 2], 
     Constraints[d9 + d10 + d11 + d12 + d13 + d14 + d15 + d16 == 2], 
     Constraints[d1 + d9 <= 1], 
     Constraints[d2 + d10 <= 1], 
     Constraints[d3 + d11 <= 1], 
     Constraints[d4 + d12 <= 1], 
     Constraints[d5 + d13 <= 1], 
     Constraints[d6 + d14 <= 1], 
     Constraints[d7 + d15 <= 1], 
     Constraints[d8 + d16 <= 1], 
     Constraints[Max[d1 * 1, d2 * 2, d3 * 3, d4 * 4, d5 * 1, d6 * 2, d7 * 3, d8 * 4] <= Min[d9 * 1, d10 * 2, d11 * 3, d12 * 4, d13 * 1, d14 * 2, d15 * 3, d16 * 4]] 
    ] 
"; 

SolverContext sc = SolverContext.GetContext(); 
sc.LoadModel(FileFormat.OML, new StringReader(oml)); 
var sol = sc.Solve(); 
Console.WriteLine(sol.GetReport()); 

編輯:

這就是我的報告給我:

===Solver Foundation Service Report=== 
Date: 6/26/2012 11:00:55 AM 
Version: Microsoft Solver Foundation 3.0.1.10599 Express Edition 
Model Name: DefaultModel 
Capabilities Applied: CP 
Solve Time (ms): 135 
Total Time (ms): 338 
Solve Completion Status: Feasible 
Solver Selected: Microsoft.SolverFoundation.Solvers.ConstraintSystem 
Directives: 
Microsoft.SolverFoundation.Services.Directive 
Algorithm: TreeSearch 
Variable Selection: DomainOverWeightedDegree 
Value Selection: ForwardOrder 
Move Selection: Any 
Backtrack Count: 0 
===Solution Details=== 
Goals: 

Decisions: 
d1: 0 
d2: 0 
d3: 0 
d4: 0 
d5: 0 
d6: 0 
d7: 1 
d8: 1 
d9: 0 
d10: 0 
d11: 1 
d12: 1 
d13: 0 
d14: 0 
d15: 0 
d16: 0 
+0

非建設性但有趣的地獄 – Charleh

+0

你正在使用哪個MSF版本?我在MSF 3.1(構建3.0.2.10889,64位)中運行了您的代碼,並獲取了報告_Solve完成狀態:Infeasible_。選定求解器_ConstraintSystem_,算法_TreeSearch_。 –

+0

對於我們這些有點懶惰的人,你能否提供一些你認爲值是最終約束檢查應該處理的細節? – NotMe

回答

2

這似乎是一個版本的問題。當在MSF的最新版本(標準版本)中運行相同的問題時,解決方案將此問題報告爲不可行。除此之外,報告列出了與上面3.0中的報告相同的屬性,而不是決策值。

所以,好像在MSF 3.0中存在某種錯誤。要克服此錯誤,請嘗試升級到最新的MSF版本3.1。