scipy minimiser avec des contraintes
Je sais que cette question devrait être traitée dans le manuel de scipy.optimiser, mais je ne comprends pas assez bien. Peut-être que vous pouvez aider
J'ai une fonction (c'est juste un exemple, pas la vraie fonction, mais j'ai besoin de comprendre à ce niveau):
Modifier (exemple):
Supposons que j'ai une matrice
arr = array([[0.8, 0.2],[-0.1, 0.14]])
avec une fonction cible
def matr_t(t):
return array([[t[0], 0],[t[2]+complex(0,1)*t[3], t[1]]]
def target(t):
arr2 = matr_t(t)
ret = 0
for i, v1 in enumerate(arr):
for j, v2 in enumerate(v1):
ret += abs(arr[i][j]-arr2[i][j])**2
return ret
maintenant, je veux minimiser cette fonction cible sous l'hypothèse que la t[i] sont des nombres réels, et quelque chose comme t[0]+t[1]=1
OriginalL'auteur wa4557 | 2013-11-19
Vous devez vous connecter pour publier un commentaire.
Cette contrainte
serait une égalité (
type='eq'
) contrainte, où vous faire une fonction qui doit être égal à zéro:Puis vous faites un
dict
de votre contrainte (liste des dicts si plus d'un):Je n'ai jamais essayé, mais je crois que pour garder
t
réel, vous pouvez utiliser:Et faire de votre
cons
comprennent à la fois des contraintes:Alors vous nourrir
cons
enminimize
:Pas exactement sûr de la façon de mettre en œuvre, si votre entrée est complexe, la sortie peut être trop. La première contrainte implique que
t.imag.sum()
est égale à zéro, puisque nous sommes seuls à le comparer à de véritables 1, mais mon montage montre de manière plus explicite contrainte.comment faire si je veux
con
>0 , <, 0, >=0 ou <=0 ,je trouvetype
n'a que deux type deineq
eteq
À partir de la doc: "l'Égalité contrainte signifie que la contrainte de résultat de la fonction est à zéro alors que l'inégalité signifie qu'il est non-négative. Notez que COBYLA prend uniquement en charge les contraintes d'inégalité". Votre peut toujours réécrire votre eq/ineq contrainte à s'exprimer en tant que tel.
OriginalL'auteur askewchan