gpt4 book ai didi

algorithm - 使用 F# 在 Microsoft Solver 中添加约束

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:15 25 4
gpt4 key购买 nike

我正在使用 Microsoft Solver Foundation 和 F# 实现图形着色问题的解决方案。最近我发现了这篇文档:

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

其中解释了如何使用 C# 实现这一点。我试图翻译这个,但是添加约束有问题。在 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);

过了一会儿,我在 Term 类中找到了一个函数,可以用来代替:

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

但是,使用这个“Term.op_Inequality”是相当不方便的。有没有办法更好地解决我的问题?

最佳答案

快速修复是重新定义 != 运算符。它将覆盖其他 != 运算符,因此最好将其保持在尽可能小的范围内。

例如,我会将其保存在 solve 函数中:

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
...

如果您需要 != 的多个重载,您应该将 Decision 包装在 F# 可区分联合中,并以 F# 的方式定义所有运算符。

我在 Who owns the Zebra example with MSF 上使用了上面的快速修复.密码是available here ,这可能对您有所帮助。

关于algorithm - 使用 F# 在 Microsoft Solver 中添加约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18037233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com