2012-06-26 2 views
2

실수로이 실현 불가능한 코드 oml을 작성했습니다. 무엇이 잘못되었는지는 오른쪽의 최소값이 0이어야하고 왼쪽의 최대 값이 0보다 커야하기 때문에 하단의 제약 조건이 불가능하다는 것입니다 (물론 내가 누락 된 것이 아니라면).Microsoft Solver Foundation에 도청이 있습니까?

문제는 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 Completion Status : Infeasible_라는 보고서를 받았다. 선택된 솔버 _ConstraintSystem_, 알고리즘 _TreeSearch_. –

+0

조금 게으른 사람들을 위해 최종 제한 검사가 처리되어야하는 값이 무엇이라고 생각하는지에 대한 세부 정보를 제공 할 수 있습니까? – NotMe

답변

2

버전 문제가 될 것으로 보인다. 해결사는 MSF의 최신 릴리스 (표준 버전)에서 동일한 문제를 실행할 때 Infeasible으로 문제를보고합니다. 이 외에도 보고서에는 위의 3.0의 보고서와 동일한 속성이 표시되며 결정 값이 아닙니다.

그렇습니다. MSF 3.0에는 어떤 종류의 버그가있는 것처럼 보입니다. 이 버그를 극복하려면 최신 MSF 버전 3.1을 사용해보십시오.