2017-02-17 1 views
4

J'utilise le module scipy.optimize pour trouver les poids d'entrée optimaux qui réduiraient ma sortie. À partir des exemples que j'ai vus, nous définissons la contrainte avec une équation unilatérale; alors nous créons une variable du type "inégalité". Ma question est de savoir comment le paquet d'optimisation sait si la somme des variables dans ma contrainte doit être inférieure à 1 ou supérieure à 1?Scipy.optimize Inequality Constraint - Quel côté de l'inégalité est considéré?

...

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

....

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

lien vers une solution complète, je me sers dans mon exemple: http://apmonitor.com/che263/index.php/Main/PythonOptimization

Merci.

+1

[scipy.optimize.minimize] (https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html) indique "Contrainte d'égalité" que le résultat de la fonction de contrainte doit être nul alors que ** l'inégalité signifie qu'elle doit être non négative **. " – endolith

Répondre

5

Si vous faites référence à https://docs.scipy.org/doc/scipy-0.18.1/reference/tutorial/optimize.html et SCROOL jusqu'à la minimisation Contraints des fonctions scalaires à plusieurs variables (minimiser), vous pouvez constater que

Cet algorithme permet de traiter des problèmes de minimisation sous contraintes 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écifier le type de la contrainte comme

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

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