문제

나는 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_tncscipy.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) 알고리즘과 혼동하지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top