3

谁能给我看一个在 F# 中使用 NelderMeadSolver 类的示例代码?

例如,我想最小化以下函数:F(X, Y)

F = (X-1)^2 + (y-1)^2 where 0< X < 2 , 0< Y < 2 答案显然是 X = 1, Y = 1

我找到了 C# 的示例:http:
//msdn.microsoft.com/en-us/library/hh404040 (v=VS.93).aspx

如果有人能给我简单的 F# 代码以最小化上述功能,我将不胜感激。谢谢你。

4

1 回答 1

4

我以前从未使用过 Solver Foundation,但这里是MSDN 中 C# 示例的直接翻译(适用于您的优化功能):

open System
open Microsoft.SolverFoundation.Common
open Microsoft.SolverFoundation.Solvers

let xInitial = [| 0.; 0. |]
let xLower = [| 0.; 0. |]
let xUpper = [| 2.; 2. |]

let sqr x = x * x

let solution = 
   NelderMeadSolver.Solve(
      Func<float [], _>(fun xs -> sqr(xs.[0] - 1.) + sqr(xs.[1] - 1.)), 
      xInitial, xLower, xUpper)

printfn "%A" solution.Result
printfn "solution = %A" (solution.GetSolutionValue 0)
printfn "x = %A" (solution.GetValue 1)
printfn "y = %A" (solution.GetValue 2)

您应该能够添加 Solver Foundation 的引用并构建程序。如果您使用 F# Interactive 中的代码,请记住通过引用它们的确切路径来添加 Solver Foundation 的 dll 文件。

于 2012-02-19T19:55:53.487 回答