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

StackOverflow https://stackoverflow.com/questions/19843752

  •  29-07-2022
  •  | 
  •  

Вопрос

Я унаследовал какой -то код, который пытается минимизировать функцию, используя 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? Я пытался провести некоторое исследование структуры этой функции оптимизации, но у меня возникают проблемы с поиском ответа, который мне нужен. Любая помощь очень ценится

Это было полезно?

Решение

Краткий ответ в том, что 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: Круп, необязательный

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top