scipy.optimize.

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)

Функция для минимизации. Должна делать одно из:

  1. Возвращает f и g, где f — значение функции, а g — её градиент (список чисел с плавающей точкой).

  2. Возвращает значение функции, но предоставляет функцию градиента отдельно как fprime.

  3. Возвращает значение функции и устанавливает 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 — текущий вектор параметров.

Возвращает:
xndarray

Решение.

nfevalint

Количество вычислений функции.

rcint

Код возврата, см. ниже

Смотрите также

minimize

Интерфейс к алгоритмам минимизации для многомерных функций. См. 'TNC' метод в частности.

Примечания

Основной алгоритм — усеченный Ньютон, также называемый методом Ньютона-сопряженных градиентов. Этот метод отличается от scipy.optimize.fmin_ncg тем, что

  1. он оборачивает C-реализацию алгоритма

  2. он позволяет задать верхнюю и нижнюю границу для каждой переменной.

Алгоритм учитывает ограничения, определяя направление спуска как в неограниченном усечённом методе Ньютона, но никогда не делая шаг достаточно большим, чтобы выйти из пространства допустимых 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 bounds

  • 6 : Не удаётся продолжить

  • 7 : Пользователь запросил завершение минимизации

Ссылки

Wright S., Nocedal J. (2006), 'Numerical Optimization'

Nash S.G. (1984), "Минимизация ньютоновского типа с помощью метода Ланцоша", SIAM Journal of Numerical Analysis 21, стр. 770-778