1

Microsoft Solver Foundation 및 F #을 사용하여 Graph Coloring 문제에 대한 솔루션을 구현하고 있습니다. 이 사용하는 C#을 구현하는 방법을 설명F를 사용하여 Microsoft 해법에서 제약 조건 추가하기 #

http://msdn.microsoft.com/en-us/library/ff826354(v=vs.93).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

: 최근에 나는 문서의 조각을 발견했습니다. 나는 이것을 번역하려했지만 제약 조건을 추가하는 데 문제가있다. C#에서 그것은 아주 간단합니다

model.AddConstraints("borders", 
    be != de, be != fr, be != nl, de != fr, de != nl); 

그러나 F 번호에 대한 글을 읽고 번역은 작동하지 않습니다

// WRONG !! 
model.AddConstraints("borders", 
    be <> de, be <> fr, be <> nl, de <> fr, de <> nl); 

을 나는 용어 ​​클래스의 기능을 발견 잠시 후, 이는 대신 사용할 수 있습니다

model.AddConstraints("borders1", Term.op_Inequality(be, de)) |> ignore 

그러나이 "Term.op_Inequality"를 사용하는 것은 매우 불편합니다. 내 문제를 더 잘 해결할 수있는 방법이 있습니까?

답변

4

빠른 수정은 != 연산자를 재정의하는 것입니다. 다른 != 연산자보다 우선하므로 가능한 가장 작은 범위에 두는 것이 가장 좋습니다.

예를 들어, 나는 그것은 solve 기능을 유지합니다 : 당신이 !=의 여러 오버로드가 필요한 경우, 당신은 F #으로 Decision 포장 노동 조합을 차별하고 F #의 방법으로 모든 연산자를 정의해야

let solve args = 
    ... 
    let (!=) (x: Decision) (y: Decision) = Term.op_Inequality(x, y) 

    model.AddConstraints("borders", 
      be != de, be != fr, be != nl, de != fr, de != nl) |> ignore 
    ... 

.

Who owns the Zebra example with MSF에서 위의 빠른 해결 방법을 사용합니다. 코드는 available here이며 도움이됩니다.

+0

감사합니다. 나는 비록 나가이 재료를 위해 몇 시간 동안 인터넷 검색을 했더라도이 웹 사이트를 몰랐다. 확실히 도움이 될 것입니다. 건배! :) –