2

任何人都可以讓我看一個示例代碼來使用F#中的NelderMeadSolver類嗎?F#微軟求解基金會 - NelderMeadSolver類

例如,我希望儘量減少下面的函數:F(X,Y)

F =(X-1)^ 2 +(Y-1)^ 2,其中0 < X < 2,0 <ÿ< 2回答是obviousely X = 1,Y = 1

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

我希望非常多,如果有人可以給我簡單F#代碼,以儘量減少上述功能。謝謝。

回答

3

我以前從未使用過求解基金會,但這裏是C# example in MSDN一個簡單的翻譯(適應您的優化功能):

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) 

你應該能夠添加解算器基金會的引用和構建程序。如果您使用F#Interactive中的代碼,請記住通過引用其確切路徑來添加Solver Foundation的dll文件。

+0

謝謝。我設法引用了SolverFoundation並重定向了.net framework 4.但是我擔心我無法使用VS 11編譯上面的代碼。我想我必須先實例化NelderMeadSolver類。例如,讓NMSolver = new NelderMeadSolver(),然後讓solution = NMSolver.Solver(.....)以下是該類的鏈接:http://msdn.microsoft.com/en-us/library/microsoft .solverfoundation.solvers.neldermeadsolver(v = vs.93).aspx – user1219664 2012-02-19 20:15:52

+0

什麼是錯誤?根據你的鏈接'NelderMeadSolver.Solve'是一個靜態方法,所以你不必實例化一個對象來使用求解器。 – pad 2012-02-19 20:59:37

+0

它有一個線路上的錯誤讓解= NelderMeadSolver.Solve(...)說,「成員或對象構造函數'解決'不帶1個參數(S)。重載被發現帶2個參數。解決方法沒有一對一的匹配它的C#couterpart。上面的鏈接給出了一些關於參數的信息,但我不知道如何實現它。謝謝!! – user1219664 2012-02-19 21:12:47