Подтвердить что ты не робот

Структура входных данных для функции минимизации scipy

Я унаследовал некоторый код, который пытается свести к минимуму функцию с помощью scipy.optimize.minimize. У меня возникли проблемы с пониманием некоторых входов аргументов fun и jac

Вызов для минимизации выглядит примерно так:

result = minimize(func, jac=jac_func, args=(D_neg, D, C), method = 'TNC' ...other arguments)

func выглядит следующим образом:

def func(G, D_neg, D, C):
#do stuff

jac_func имеет следующую структуру:

def jac_func(G, D_neg, D, C):
#do stuff

То, что я не понимаю, это то, откуда поступает вход G в func и jac_func. Это как-то указано в функции minimize или в том, что method указан как TNC? Я попытался провести некоторое исследование структуры этой функции оптимизации, но мне трудно найти ответ, который мне нужен. Любая помощь приветствуется

4b9b3361

Ответ 1

Короткий ответ: G поддерживается оптимизатором как часть процесса минимизации, в то время как аргументы (D_neg, D, and C) передаются как есть из кортежа args.

По умолчанию scipy.optimize.minimize принимает функцию fun(x), которая принимает один аргумент x (который может быть массивом или тому подобным) и возвращает скаляр. scipy.optimize.minimize затем находит значение аргумента xp, так что fun(xp) меньше fun(x) для других значений x. Оптимизатор отвечает за создание значений x и передачу их в fun для оценки.

Но что, если у вас есть функция fun(x, y), которая имеет некоторый дополнительный параметр y, который нужно передавать отдельно (но считается константой для целей оптимизации)? Для этого используется кортеж args. Документация пытается объяснить, как используется кортеж args, но это может быть немного трудно проанализировать:

args: кортеж, необязательный

Дополнительные аргументы передаются объектной функции и ее производным (якобиан, гессиан).

Фактически, scipy.optimize.minimize будет передавать все, что находится в args, как остальную часть аргументов в fun, используя нотацию аргументов asterisk: тогда функция во время оптимизации вызывается как fun(x, *args). Часть x передается оптимизатором, а кортеж args задается как остальные аргументы.

Итак, в вашем коде значение элемента G поддерживается оптимизатором при оценке возможных значений G, а кортеж (D_neg, D, C) передается как-есть.