Je souhaite utiliser la fonction scipy.optimize.minimize sans spécifier mes contraintes en tant que fonctions lambda. Est-ce possible?Utilisation de scipy.optimize.minimize sans fonctions lambda
-à-dire pour l'exemple standard:
from scipy.optimize import minimize
def fun(x):
return (x[0] - 1) ** 2 + (x[1] - 2.5)**2.
x = (2, 0)
def c_0(x):
return x[0] - 2. * x[1] + 2.
def c_1(x):
return -x[0] - 2. * x[1] + 6.
def c_2(x):
return -x[0] + 2. * x[1] + 2.
cons = ({'type': 'ineq', 'fun': c_0(x)},
{'type': 'ineq', 'fun': c_1(x)},
{'type': 'ineq', 'fun': c_2(x)})
bnds = ((0, None), (0, None))
res = minimize(fun(x), x, method='SLSQP', bounds=bnds, constraints=cons)
La raison pour laquelle je veux éviter d'utiliser des fonctions lambda est que mon numéro de contrainte se développe assez rapidement pour mon problème (2 * nombre de degrés de liberté), donc à moins qu'il y une façon de créer une usine "lambda" pour mes contraintes, les écrire explicitement deviendra vite fastidieux.
Les retours extrait de code ci-dessus:
TypeError: 'float' object is not callable
Notez la différence: le plaisir est une fonction; fun (x) est sa valeur à x. – FTP
Merci pour la clarification! – user2770149