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]
Share:
89,390
Henrik Hansen
Author by

Henrik Hansen

Updated on September 24, 2020

Comments

  • Henrik Hansen
    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
    develarist over 3 years
    print(params) shows the array, but what are they? I see no input params being sent to the function f in the call to the function in the first place. and how do the params 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?