minimize_scalar#
- scipy.optimize.minimize_scalar(fun, скобка=None, границы=None, args=(), метод=None, tol=None, опции=None)[источник]#
Локальная минимизация скалярной функции одной переменной.
- Параметры:
- funcallable
Целевая функция. Скалярная функция, должна возвращать скаляр.
Предположим, что вызываемый объект имеет сигнатуру
f0(x, *my_args, **my_kwargs), гдеmy_argsиmy_kwargsявляются обязательными позиционными и ключевыми аргументами. Вместо передачиf0в качестве вызываемого объекта, оберните его, чтобы он принимал толькоx; например, передатьfun=lambda x: f0(x, *my_args, **my_kwargs)как вызываемый объект, гдеmy_args(кортеж) иmy_kwargs(dict) были собраны перед вызовом этой функции.- скобкаsequence, optional
Для методов 'brent' и 'golden',
bracketопределяет интервал скобок и является обязательным. Либо тройка(xa, xb, xc)удовлетворяющийxa < xb < xcиfunc(xb) < func(xa) and func(xb) < func(xc), или пара(xa, xb)для использования в качестве начальных точек для поиска скобки вниз по склону (см.scipy.optimize.bracket). Минимизаторres.xне обязательно будет удовлетворятьxa <= res.x <= xb.- границыsequence, optional
Для метода 'bounded', границы является обязательным и должен иметь два конечных элемента, соответствующих границам оптимизации.
- argsкортеж, необязательный
Дополнительные аргументы, передаваемые в целевую функцию.
- методstr или callable, опционально
Тип решателя. Должен быть одним из:
custom - вызываемый объект (добавлен в версии 0.14.0), см. ниже
По умолчанию “Bounded”, если заданы границы, и “Brent” в противном случае. См. раздел ‘Notes’ для подробностей о каждом решателе.
- tolfloat, опционально
Допуск для завершения. Для детального управления используйте специфичные для решателя опции.
- опцииdict, optional
Словарь опций решателя.
- maxiterint
Максимальное количество итераций для выполнения.
- dispbool
Установите True для вывода сообщений о сходимости.
См.
show_optionsдля специфичных решателю опций.
- Возвращает:
- resOptimizeResult
Результат оптимизации, представленный как
OptimizeResultобъект. Важные атрибуты:xмассив решения,successлогический флаг, указывающий, успешно ли завершился оптимизатор, иmessageкоторый описывает причину завершения. См.OptimizeResultдля описания других атрибутов.
Смотрите также
minimizeИнтерфейс к алгоритмам минимизации для скалярных многомерных функций
show_optionsДополнительные параметры, принимаемые решателями
Примечания
В этом разделе описаны доступные решатели, которые можно выбрать с помощью параметра 'method'. Методом по умолчанию является
"Bounded"Метод Брента, если границы передаются и неограничены"Brent"в противном случае.Метод Brent использует алгоритм Брента [1] для поиска локального минимума. Алгоритм использует обратную параболическую интерполяцию, когда это возможно, для ускорения сходимости метода золотого сечения.
Метод Золотой использует технику золотого сечения [1]. Использует аналог метода бисекции для уменьшения интервала. Обычно предпочтительнее использовать Brent метод.
Метод Ограниченный может выполнять ограниченную минимизацию [2] [3]. Он использует метод Брента для поиска локального минимума в интервале x1 < xopt < x2.
Обратите внимание, что методы Брента и Золотого сечения не гарантируют успех, если не задан допустимый
bracketпредоставляется тройка. Если трёхточечный интервал не может быть найден, рассмотритеscipy.optimize.minimize. Также, все методы предназначены только для локальной минимизации. Когда целевая функция имеет более одного локального минимума, рассмотрите Глобальная оптимизация.Пользовательские минимизаторы
Может быть полезно передать пользовательский метод минимизации, например, при использовании некоторого интерфейса библиотеки для minimize_scalar. Вы можете просто передать вызываемый объект в качестве
methodпараметр.Вызываемый объект вызывается как
method(fun, args, **kwargs, **options)гдеkwargsсоответствует любым другим параметрам, переданным вminimize(такие какbracket, tol, и т.д.), за исключением опции dict, который имеет свое содержимое, также передаваемое как метод параметры попарно. Метод должен возвращатьOptimizeResultобъект.Предоставленный метод вызываемый объект должен уметь принимать (и, возможно, игнорировать) произвольные параметры; набор параметров, принимаемых
minimizeможет расширяться в будущих версиях, и тогда эти параметры будут переданы методу. Пример можно найти в руководстве по scipy.optimize.Добавлено в версии 0.11.0.
Ссылки
[1] (1,2)Press, W., S.A. Teukolsky, W.T. Vetterling, и B.P. Flannery. Numerical Recipes in C. Cambridge University Press.
[2]Forsythe, G.E., M. A. Malcolm, и C. B. Moler. "Компьютерные методы для математических вычислений." Prentice-Hall Series in Automatic Computation 259 (1977).
[3]Brent, Richard P. Algorithms for Minimization Without Derivatives. Courier Corporation, 2013.
Примеры
Рассмотрим задачу минимизации следующей функции.
>>> def f(x): ... return (x - 2) * x * (x + 2)**2
Используя Brent метод, мы находим локальный минимум как:
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar(f) >>> res.fun -9.9149495908
Минимизатор:
>>> res.x 1.28077640403
Используя Ограниченный метод, мы находим локальный минимум с заданными границами как:
>>> res = minimize_scalar(f, bounds=(-3, -1), method='bounded') >>> res.fun # minimum 3.28365179850e-13 >>> res.x # minimizer -2.0000002026