brute
그래서 기본 동작을 재정의, 최소화 기능에 추가 인수를 전달 할 수있는 옵션이 없습니다, 당신은 fmin
의 래퍼를 만들어야합니다 래퍼에서 maxiter
인수를 설정합니다. 랩퍼는 finish
인수로 brute
에 전달됩니다. 여기에이 할 수있는 방법은 예를 들어
, 우리는 구간 [0, 10]에
def func(x):
return np.cos(3*x) + 0.25*(x-5)**2
의 최소를 원하는 가정, 우리는 4로 fmin
의 반복의 최대 수를 제한하려면 (ipython 세션에서).
우선, 수입 :
In [102]: import numpy as np
In [103]: from scipy.optimize import brute, fmin
이 목적 함수를 정의 다음 finish
인수 람다 식을 사용
In [104]: def func(x):
...: return np.cos(3*x) + 0.25*(x-5)**2
...:
통화 brute
. 람다 표현식은 full_output=True
과 maxiter=4
과 함께 인수를 fmin
에 전달합니다. 여기서 결과가있어, 비교를 위해
In [110]: brute(func, [slice(0, 10, 0.1)], finish=lambda func, x0, args=(): fmin(func, x0, args, full_output=True, maxiter=4))
Warning: Maximum number of iterations has been exceeded.
Out[110]: array([ 5.2325])
(. 대신 람다 식, 당신은 같은 일을 별도의 기능을 정의 할 수 있습니다) 때 maxiter=100
:
In [111]: brute(func, [slice(0, 10, 0.1)], finish=lambda func, x0, args=(): fmin(func, x0, args, full_output=True, maxiter=100))
Optimization terminated successfully.
Current function value: -0.986810
Iterations: 13
Function evaluations: 26
Out[111]: array([ 5.2235498])
그리고 우리가 사용하지 않는 경우 람다 식 fmin
에 대한 호출은 maxiter
:
예상대로
In [112]: brute(func, [slice(0, 10, 0.1)], finish=lambda func, x0, args=(): fmin(func, x0, args, full_output=True))
Optimization terminated successfully.
Current function value: -0.986810
Iterations: 13
Function evaluations: 26
Out[112]: array([ 5.2235498])
, 그 결과를 오버라이드하지 01,234,985,768,332,229,511와 동일:
In [113]: brute(func, [slice(0, 10, 0.1)])
Out[113]: array([ 5.2235498])