2

누구든지 F #에서 NelderMeadSolver 클래스를 사용하는 샘플 코드를 보여줄 수 있습니까? F (X, Y)F # Microsoft Solver Foundation - NelderMeadSolver 클래스

F = (X-1)^2 + (Y-1)^2 0 < X < 2,0 :

예를 들어, I는 다음의 함수를 최소화 할 < Y <이 대답은 내가 C 번호 예를 발견, obviousely Y = 1

X = 1 :
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 프레임 워크 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

+0

무엇이 오류입니까? 귀하의 링크에 따르면'NelderMeadSolver.Solve'는 정적 메서드이므로 솔버를 사용하기 위해 객체를 인스턴스화 할 필요가 없습니다. – pad

+0

그것은 해결 방법 = NelderMeadSolver.Solve (...)에서 "멤버 또는 개체 생성자 'Solve'가 1 개의 인수를 사용하지 않는다는 오류가 있습니다. 두 개의 인수를 사용하여 오버로드가 발견되었습니다. Solve 메서드는 C# couterpart와 일대일 대응을하지 않습니다. 위의 링크는 인수에 관한 정보를 제공하지만 구현 방법을 모르겠습니다. 감사합니다. – user1219664

관련 문제