Ламбдифицирующие функции нескольких переменных - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь оптимизировать функцию стоимости EL_c

EL_c=-300.49858410695*C_0 - 301*C_1 - 60.2000000000003*C_2

После подтверждения свободных переменных с помощью

EL_c.free_symbols={C_0,C_1,C_2}

Я пытался использовать

ff=lambdify(("C_0","C_1","C_2"),EL_c)

а затем

x0=(1,1,1)
scipy.optimize.minimize(ff,x0,method="Nelder-Mead")

Однако я получаю ошибку

TypeError: <lambda>() missing 2 required positional arguments: 'C_1' 
and 'C_2'

В идеале я хотел бы иметь возможность оптимизировать функцию, используя описанный выше метод.

1 Ответ

0 голосов
/ 09 июля 2019

Согласно документации по оптимизации , которая была правильно указана в этом ответе , оптимизируемая вызываемая функция должна принимать кортеж формы (N,) , а не просто N аргументов.

Для меня сработало:

ff = lambdify((A,B,C), EL_c)
fff = lambda x: ff(*x) # Unpack tuple into positional args
scipy.optimize.minimize(fff, x0=(1,1,1), method="Nelder-Mead")

(мои переменные назывались A, B, C.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...