Le code suivant:Réduire au minimum un système d'équations aux contraintes (scipy.optimize.minimize)
import numpy as np
from scipy.optimize import minimize
def eq(p):
s1,s2,s3 = p
f1 = 1.1**3/s1*1.1**1+s2*1.1**2+s3*1.1**3
f2 = 0.9**1/s1*0.9**1+s2*0.9**2+s3*0.9**3
return (f1, f2)
bnds = ((0, None), (0, None), (0, None))
cons = ({ 'type' : 'ineq', 'fun': lambda p: p[0]+[p1]+[p2] - 1})
minimize(eq, (0.3,0.3,0.3), bounds=bnds, constraints=cons)
jette l'erreur
TypeError: unsupported operand type(s) for -: 'tuple' and 'tuple'
Je veux minimiser f1
et f2
tels que le s_t > 0
et sum s_t <= 1
, pour t = 1, 2, 3.
'p [0] + [p1] + [p2]' Ceci est faux, non? – xvan
Cela devrait modéliser la contrainte que 'sum s_t <= 1'. Je remarque également que j'ai besoin de spécifier 'method = 'SLSQP'' pour autoriser les contraintes, mais cela échoue avec' error: échec de la conversion du 8ème argument g' de _slsqp.slsqp en C/Fortran array' - j'ai vu cette erreur dans un autre sujet ici sur stackoverflow, mais sans réponse .. – norac