web-dev-qa-db-fra.com

Optimiser plusieurs variables dans SciPy.

Selon la documentation SciPy il est possible de minimiser les fonctions avec plusieurs variables, mais cela ne dit pas comment optimiser ces fonctions.

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)

Le code ci-dessus essaie de minimiser la fonction f, mais pour ma tâche, je dois minimiser par rapport à trois variables.

L'introduction d'un deuxième argument et l'ajustement de minimiser en conséquence génèrent une erreur (TypeError: f() takes exactly 2 arguments (1 given)).

Comment fonctionne minimize lors de la minimisation avec plusieurs variables.

52
Henrik Hansen

Emballez les multiples variables dans un seul tableau:

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)

les rendements

[ -1.66705302e-08  -1.66705302e-08  -1.66705302e-08]
65
unutbu