Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple variables in SciPy's optimize.minimize

Tags:

python

math

scipy

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.

like image 375
Henrik Hansen Avatar asked Dec 02 '12 14:12

Henrik Hansen


People also ask

How do I speed up SciPy optimization?

Speed up your objective function. Reduce the number of design variables. Choose a better initial guess. Use parallel processing.


1 Answers

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] 
like image 166
unutbu Avatar answered Oct 01 '22 13:10

unutbu