fmin_tnc#
- scipy.optimize.fmin_tnc(функция, x0, fprime=None, args=(), approx_grad=0, границы=None, эпсилон=1e-08, scale=None, смещение=None, сообщения=15, maxCGit=-1, maxfun=None, eta=-1, stepmx=0, точность=0, fmin=0, ftol=-1, xtol=-1, pgtol=-1, масштабировать=-1, disp=None, callback=None)[источник]#
Минимизировать функцию с переменными, ограниченными границами, используя информацию о градиенте в усечённом алгоритме Ньютона. Этот метод оборачивает C-реализацию алгоритма.
- Параметры:
- функцияcallable
func(x, *args) Функция для минимизации. Должна делать одно из:
Возвращает f и g, где f — значение функции, а g — её градиент (список чисел с плавающей точкой).
Возвращает значение функции, но предоставляет функцию градиента отдельно как fprime.
Возвращает значение функции и устанавливает
approx_grad=True.
Если функция возвращает None, минимизация прерывается.
- x0array_like
Начальная оценка минимума.
- fprimecallable
fprime(x, *args), опционально Градиент функция. Если None, то либо функция должна возвращать значение функции и градиент (
f,g = func(x, *args)) или approx_grad должно быть True.- argsкортеж, необязательный
Аргументы для передачи функции.
- approx_gradbool, необязательно
Если true, аппроксимировать градиент численно.
- границысписок, необязательный
пары (min, max) для каждого элемента в x0, определяющие границы этого параметра. Используйте None или +/-inf для min или max, когда нет ограничения в этом направлении.
- эпсилонfloat, опционально
Используется, если approx_grad равен True. Шаг в конечной разностной аппроксимации для fprime.
- scalearray_like, необязательный
Масштабные коэффициенты для применения к каждой переменной. Если None, коэффициенты равны (верхняя граница - нижняя граница) для переменных с ограниченным интервалом и 1+|x| для остальных. По умолчанию None.
- смещениеarray_like, необязательный
Значение, вычитаемое из каждой переменной. Если None, смещения равны (up+low)/2 для переменных с ограниченным интервалом и x для остальных.
- сообщенияint, необязательный
Битовая маска, используемая для выбора сообщений, отображаемых во время минимизации, значения определены в словаре MSGS. По умолчанию MGS_ALL.
- dispint, необязательный
Целочисленный интерфейс для сообщений. 0 = нет сообщений, 5 = все сообщения
- maxCGitint, необязательный
Максимальное количество вычислений гессиан*вектор за основную итерацию. Если maxCGit == 0, выбранное направление - -градиент, если maxCGit < 0, maxCGit устанавливается в max(1,min(50,n/2)). По умолчанию -1.
- maxfunint, необязательный
Максимальное количество вычислений функции. Если None, maxfun устанавливается в max(100, 10*len(x0)). По умолчанию None. Обратите внимание, что эта функция может превысить лимит из-за вычисления градиентов численным дифференцированием.
- etafloat, опционально
Строгость линейного поиска. Если < 0 или > 1, устанавливается в 0.25. По умолчанию -1.
- stepmxfloat, опционально
Максимальный шаг для линейного поиска. Может быть увеличен во время вызова. Если слишком мал, будет установлен в 10.0. По умолчанию: 0.
- точностьfloat, опционально
Относительная точность для расчетов конечных разностей. Если <= машинной точности, устанавливается в sqrt(машинная точность). По умолчанию 0.
- fminfloat, опционально
Оценка минимального значения функции. По умолчанию 0.
- ftolfloat, опционально
Целевая точность для значения f в критерии остановки. Если ftol < 0.0, ftol устанавливается в 0.0, по умолчанию -1.
- xtolfloat, опционально
Целевая точность для значения x в критерии остановки (после применения масштабных коэффициентов x). Если xtol < 0.0, xtol устанавливается в sqrt(machine_precision). По умолчанию -1.
- pgtolfloat, опционально
Целевая точность для значения проекции градиента в критерии остановки (после применения масштабных коэффициентов x). Если pgtol < 0.0, pgtol устанавливается в 1e-2 * sqrt(accuracy). Установка значения 0.0 не рекомендуется. По умолчанию -1.
- масштабироватьfloat, опционально
Масштабирующий коэффициент (в log10), используемый для запуска перемасштабирования значения f. Если 0, перемасштабирование на каждой итерации. Если большое значение, никогда не перемасштабировать. Если < 0, перемасштабирование установлено в 1.3.
- callbackвызываемый объект, необязательный
Вызывается после каждой итерации как callback(xk), где xk — текущий вектор параметров.
- функцияcallable
- Возвращает:
- xndarray
Решение.
- nfevalint
Количество вычислений функции.
- rcint
Код возврата, см. ниже
Смотрите также
minimizeИнтерфейс к алгоритмам минимизации для многомерных функций. См. 'TNC' метод в частности.
Примечания
Основной алгоритм — усеченный Ньютон, также называемый методом Ньютона-сопряженных градиентов. Этот метод отличается от scipy.optimize.fmin_ncg тем, что
он оборачивает C-реализацию алгоритма
он позволяет задать верхнюю и нижнюю границу для каждой переменной.
Алгоритм учитывает ограничения, определяя направление спуска как в неограниченном усечённом методе Ньютона, но никогда не делая шаг достаточно большим, чтобы выйти из пространства допустимых x. Алгоритм отслеживает набор текущих активных ограничений и игнорирует их при вычислении минимально допустимого размера шага. (x, связанные с активным ограничением, остаются фиксированными.) Если максимально допустимый размер шага равен нулю, добавляется новое ограничение. В конце каждой итерации одно из ограничений может быть признано неактивным и удалено. Ограничение считается неактивным, если оно активно, но градиент для этой переменной указывает внутрь от ограничения. Удаляется конкретное ограничение, связанное с переменной наибольшего индекса, чьё ограничение больше не активно.
Коды возврата определены следующим образом:
-1: Нереализуемо (нижняя граница > верхней границы)0: Локальный минимум достигнут (\(|pg| \approx 0\))1: Сошлось (\(|f_n-f_(n-1)| \approx 0\))2: Сошлось (\(|x_n-x_(n-1)| \approx 0\))3: Достигнуто максимальное количество вычислений функции4: Линейный поиск не удался5: All lower bounds are equal to the upper bounds6: Не удаётся продолжить7: Пользователь запросил завершение минимизации
Ссылки
Wright S., Nocedal J. (2006), 'Numerical Optimization'
Nash S.G. (1984), "Минимизация ньютоновского типа с помощью метода Ланцоша", SIAM Journal of Numerical Analysis 21, стр. 770-778