파생 기능이없는 파이썬 기능 최소화
-
09-12-2019 - |
문제
나는 scipy.optimize.Optimize에서의 일부 기능에 익숙해지고, 과거를 사용하여 파생물을 알고있는 기능을 최소화하기 위해 FMIN_CG를 사용했습니다.그러나, 나는 이제 쉽게 차별화되지 않는 공식을 가지고 있습니다.
해당 모듈의 기능 중 일부 (fmin_cg, 예를 들어,)는 실제로 파생물을 제공하지 않아도됩니다.나는 그런 다음 각 매개 변수에 작은 값을 추가하여 quazi 유도체를 계산한다고 가정합니다.
내 주요 질문은 다음과 같습니다. 어떤 기능 (또는 다른 곳에서 또는 다른 곳에서는 다른 곳에서) 중 어느 것이 주어진 파생물이없는 여러 매개 변수를 통해 기능을 최소화 할 때 사용하는 것이 가장 좋습니다.
해결책
예, fmin_bfgs fmin_cg fmin_powell
중 하나를 로 호출합니다.
fmin_xx( func, x0, fprime=None, epsilon=.001 ... )
.
x
에서 (func( x + epsilon I ) - func(x)) / epsilon
에서 그라디언트를 추정합니다.
그래도 귀하의 신청서를위한 "최상"이지만,
기능이 얼마나 부드럽고 얼마나 많은 변수인지 강하게 의존합니다.
Plain Nelder-Mead, fmin
는 좋은 첫 번째 선택입니다 - 느리지만 확실합니다.
불행히도 SciPy Nelder-Mead는 X의 척도에 관계없이 고정 크기의 단면, .05 / .00025로 시작됩니다.
fmin_tnc
의 scipy.optimize.tnc
가 좋다고 들었습니다 :
fmin_tnc( func, x0, approx_grad=True, epsilon=.001 ... ) or
fmin_tnc( func_and_grad, x0 ... ) # func, your own estimated gradient
.
(fmin_tnc는 ~ fmin_ncg 바인딩 된 제약 조건이있는 ~ fmin_ncg, 멋진 메시지가 일어나는 일이 일어나고 다소 다른 args.)
다른 팁
나는 Skipy에서 사용할 수있는 것에 익숙하지 않지만 방법 (일명 굴뚝 또는 amoeba 메소드)은 다차원 최적화에 자주 잘 작동합니다.
"Nofollow"> scipy 설명서 minimize()
인수를 사용하여 method='Nelder-Mead'
함수에서 옵션으로 사용할 수있는 것처럼 보입니다.
선형 프로그래밍을위한 단순 (Dantzig) 알고리즘과 혼동하지 마십시오.