ошибка scipy.minimize ValueError: целевая функция, предоставляемая пользователем, должна возвращать скалярное значение

#python #scipy-optimize #scipy-optimize-minimize

#python #ошибка значения #scipy-оптимизировать #scipy-оптимизировать-минимизировать

Вопрос:

Я прочитал документацию и попытался понять, как работать scipy.optimize.minimize() , но я не могу.

 from scipy.optimize import minimize

def f(x):
    return x**2

x0 = [-2.0, -1.0, 0.0, 1.0, 2.0]

res = minimize(f, x0)
print(res.x)
  

Вывод: «Ошибка значения: целевая функция, предоставляемая пользователем, должна возвращать скалярное значение«.

Комментарии:

1. С какими частями этого сообщения об ошибке у вас проблемы? Ваша целевая функция на деле не возвращает скаляр. Например, f(x0)=[4.0,1.0,0.0,1.0,2.0] .

Ответ №1:

Я решил это: x0 должно быть числом или (1,) массивом

Ответ №2:

В вашем примере ваш начальный массив x0 в порядке. Ошибка значения вызвана тем, что целевая функция должна возвращать одно значение, а не список / массив значений. Вы можете суммировать его или использовать l2-norm .

 def f(x):
    return sum(x**2)

res = minimize(f, x0)
print(res.x)

[-1.82818467e-08  8.41691947e-08 -1.86620236e-07 -8.41691948e-08
  1.82818469e-08]