Как указано в комментариях, вы можете просто поставить границы в списке.Минимальный пример будет выглядеть следующим образом:
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
выше на вашу фактическую функцию.