Определение границ для одномерной задачи оптимизации SciPy - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть одномерная функция, которую мне нужно оптимизировать. Мое начальное значение 20, а границы (0,50)

  • x0=[20]
  • bounds=(0,50)
  • sol1=minimize(f,x0,method="SLSQP",bounds=bounds)

Однако это приводит к IndexError.

SLSQP Error: the length of bounds is not compatible with that of x0.

Какую ошибку я здесь делаю?

1 Ответ

0 голосов
/ 09 ноября 2018

Как указано в комментариях, вы можете просто поставить границы в списке.Минимальный пример будет выглядеть следующим образом:

from scipy.optimize import minimize


def f(x):
    return (x - 3) ** 2

x0 = [10]
bounds = [(0, 50)]

res = minimize(f, x0, method='SLSQP', bounds=bounds)

Тогда res.x даст ожидаемое array([3.]).

Как указано @sascha в комментариях, для такого рода проблемыВы также можете использовать minimize_scalar:

Просто измените импорт выше на

from scipy.optimize import minimize_scalar

и используйте

res2 = minimize_scalar(f, bounds=bounds)

Тогда res2.xвозвращает 3.0

Просто замените f выше на вашу фактическую функцию.

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