web-dev-qa-db-fra.com

Scipy.optimize Inégalité Contrainte - De quel côté de l'inégalité est considéré?

J'utilise le module scipy.optimize pour trouver des poids d'entrée optimaux qui minimiseraient ma sortie. À partir des exemples que j'ai vus, nous définissons la contrainte avec une équation unilatérale; nous créons ensuite une variable qui est du type "inégalité". Ma question est de savoir comment le package d'optimisation sait si la somme des variables dans ma contrainte doit être inférieure à 1 ou supérieure à 1?

...

def constraint1(x):
    return x[0]+x[1]+x[2]+x[3]-1

....

con1 = {'type': 'ineq', 'fun': constraint1}

lien vers la solution complète que j'utilise dans mon exemple: http://apmonitor.com/che263/index.php/Main/PythonOptimization

Je vous remercie.

12
trystuff

Si vous vous référez à https://docs.scipy.org/doc/scipy-0.18.1/reference/tutorial/optimize.html et faites défiler jusqu'à la minimisation contrainte des fonctions scalaires multivariées (minimiser), vous pouvez trouver ça

Cet algorithme permet de traiter des problèmes de minimisation contraints de la forme:

enter image description here

où les inégalités sont de la forme C_j(x) >= 0.

Ainsi, lorsque vous définissez la contrainte comme

def constraint1(x):
    return x[0]+x[1]+x[2]+x[3]-1

et spécifiez le type de la contrainte comme

con1 = {'type': 'ineq', 'fun': constraint1}

il suppose automatiquement que la contrainte est sous la forme standard x[0]+x[1]+x[2]+x[3]-1>=0 c'est à dire., x[0]+x[1]+x[2]+x[3]>=1

16
Sandipan Dey