3

F# で NelderMeadSolver クラスを使用するサンプル コードを教えてもらえますか?

たとえば、次の関数を最小化したい: F(X, Y)

F = (X-1)^2 + (y-1)^2 ここで 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 に答える