Multiple variables in SciPy's optimize.minimize
89,390
Pack the multiple variables into a single array:
import scipy.optimize as optimize
def f(params):
# print(params) # <-- you'll see that params is a NumPy array
a, b, c = params # <-- for readability you may wish to assign names to the component variables
return a**2 + b**2 + c**2
initial_guess = [1, 1, 1]
result = optimize.minimize(f, initial_guess)
if result.success:
fitted_params = result.x
print(fitted_params)
else:
raise ValueError(result.message)
yields
[ -1.66705302e-08 -1.66705302e-08 -1.66705302e-08]
Author by
Henrik Hansen
Updated on September 24, 2020Comments
-
Henrik Hansen over 3 years
According to the SciPy documentation it is possible to minimize functions with multiple variables, yet it doesn't tell how to optimize on such functions.
from scipy.optimize import minimize from math import * def f(c): return sqrt((sin(pi/2) + sin(0) + sin(c) - 2)**2 + (cos(pi/2) + cos(0) + cos(c) - 1)**2) print minimize(f, 3.14/2 + 3.14/7)
The above code does try to minimize the function
f
, but for my task I need to minimize with respect to three variables.Simply introducing a second argument and adjusting minimize accordingly yields an error (
TypeError: f() takes exactly 2 arguments (1 given)
).How does
minimize
work when minimizing with multiple variables. -
develarist over 3 years
print(params)
shows the array, but what are they? I see no inputparams
being sent to the functionf
in the call to the function in the first place. and how do theparams
correspond to the function being optimized? Why are the three resulting elements identical (-1.66705302e-08
). Instead of multiple scalar decision variables, how to optimize for multiple vector decision variables instead?