2014-04-02 3 views
3

저는 F #에 상당히 익숙하며 문제가 있습니다. 비선형 제약 최적화 문제를 해결하고 싶습니다. 목표는 여섯 개 매개 변수 a, b, c, d, gammarho_infty와 함수 minFunc을 최소화하는 것입니다 (이 함수는 아주 오래 그래서 여기에 게시하지는이다)와 추가 조건 :F #을 사용한 최적화

a + d > 0, 
d > 0, 
c > 0, 
gamma > 0, 
0 <= gamma <= -ln(rho_infty), 
0 < roh_infty <= 1. 

Microsoft Solver Foundation의 Nelder Mead Solver를 사용해 보았습니다. 그러나 비선형 조건 a + d > 00 <= gamma <= -ln(rho_infty)을 추가하는 방법을 모르겠습니다.

내 코드 지금까지 :

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

let funcFindParameters (startValues:float list) minimizationFunc = 

let xInitial = startValues |> List.toArray 
let lowerBound = [|-infinity; -infinity; 0.0; 0.0; 0.0; 0.0|] 
let upperBound = [|infinity; infinity; infinity; infinity; infinity; 1.0|] 

let solution = NelderMeadSolver.Solve(Func<float [], _>(fun parameters -> (minimizationFunc 
parameters.[0] parameters.[1] parameters.[2] parameters.[3] parameters.[4] parameters.[5])), 
xInitial, lowerBound, upperBound) 

where parameters.[0] = a, and so one... 

는 Nelder 미드 찾기 또는 다른 솔버를 해결하기 위해 몇 가지 가능성이 아마도 있습니까?

+0

FBS 용 CSP 솔버 라이브러리를 작성하는 시간을 가졌습니다. 어느 날 ... – Mau

+1

[R 유형 공급자] (http://bluemountaincapital.github.io/FSharpRProvider/)를 살펴볼 가치가있을 것 같습니까? R은 최적화 문제에 대한 광범위한 생태계를 제공합니다. – NoIdeaHowToFixThis

답변

3

한 가지 의견은 Microsoft.SolverFoundation에서 멀리 떨어져있을 것이므로 나쁜 알고리즘에 코딩 한 시간이 낭비되었습니다. R 형 공급자가 훨씬 좋습니다.

일반적인 해킹은 단순히 모델을 다시 매개 변수화하여 제약 조건을 처리하는 것입니다.

E = A + D

매개 변수로하고, 같은 optimzation의 계산 d를 내부 : 예를 들어, 설정 지금 당신은 단지 제약 조건을 만족해야

D = 개

그리고 e> 0이며 고정되어있다. 감마 매개 변수에 대해 비슷한 작업을 수행 할 수 있습니다.