Page 166 - 6734
P. 166
• minimizer_kwargs – аргументи, які передаються локальному
мінімізатору. Для пришвидшення можна також передавати
мінімізатору похідні функції (Якобіан, Гессіан);
• take_step – замінює функцію кроку за замовчуванням;
• accept_test – визначає тест, який використовується для
прийняття або відхилення кроку;
• callback – функція, яка викликається, коли знайдено
локальний мінімум.
import numpy as np
from scipy.optimize import basinhopping
def f(x): # функція двох змінних
y = np.cos(14.5*x[0]-
0.3)+(x[1]+0.2)*x[1]+(x[0]+0.2)*x[0]
#y=1 + 2*x[0] + 2*x[1] # (тільки для тестування
accept_test. Див. нижче)
return y # для пришвидшення пошуку мінімуму
функція разом зі значенням може також повертати
градієнт (див. документацію)
ret = basinhopping(func=f, x0=[0.0, 0.0]) # знайти
мінімум
print ret['x'], ret['fun']
class MyBounds(object): # реалізує границі проблеми
def __init__(self, xmax=[1.1, 1.1], xmin=[-1.1, -
1.1] ):
self.xmax = np.array(xmax) # максимум для x
self.xmin = np.array(xmin) # мінімум для x
def __call__(self, **kwargs):
x = kwargs["x_new"]
tmax = bool(np.all(x <= self.xmax)) # True,
якщо x менше рівне максимуму
tmin = bool(np.all(x >= self.xmin)) # True,
165