Ответ 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)
передается как-есть.