Scipy Optimize Минимизировать недостающий 1 обязательный позиционный аргумент - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь узнать, как использовать scipy.optimize.minimize. Мне он понадобится для функций от двух переменных, каждая из которых содержит около тысячи членов; поэтому я сначала придумал простой пример:

from scipy.optimize import minimize

def test_function(x,y):
    return x*(x-1)+y*(y-1)

mins=minimize(test_function,x0=(0,0),bounds=[(0,1),(0,1)])

Итак, я ожидаю ответа x = 0,5, y = 0,5.

К сожалению, вместо этого я получаю следующую ошибку:

TypeError: test_function() missing 1 required positional argument: 'y'

Что означает отсутствие в моей тестовой функции позиционного аргумента?

1 Ответ

0 голосов
/ 30 мая 2020

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

from scipy.optimize import minimize

def test_function(design_variables):
    x = design_variables[0]
    y = design_variables[1]
    return x*(x-1)*y*(y-1)

mins = minimize(test_function, x0=(0,0), bounds=[(0,1),(0,1)])
print(mins)

Результат оптимизации:

     fun: 0.0
     jac: array([0., 0.])
 message: 'Optimization terminated successfully.'
    nfev: 4
     nit: 1
    njev: 1
  status: 0
 success: True
       x: array([0., 0.])
...