import numpy
from numpy import asarray
Initial = numpy.asarray [2.0, 4.0, 5.0, 3.0, 5.0, 6.0] # Initial values to start with
bounds = [(1, 5000), (1, 6000), (2, 100000), (1, 50000), (1.0, 5000), (2, 1000000)]
# actual passed bounds
b1 = lambda x: numpy.asarray([1.4*x[0] - x[0]])
b2 = lambda x: numpy.asarray([1.4*x[1] - x[1]])
b3 = lambda x: numpy.asarray([x[2] - x[3]])
constraints = numpy.asarray([b1, b2, b3])
opt= optimize.fmin_slsqp(func,Initial,ieqcons=constraints,bounds=bounds, full_output=True,iter=200,iprint=2, acc=0.01)
Problème: Je veux passer des contraintes d'inégalité. Considérez que j'ai 6 paramètreslambda pour une fonction de contrainte
[ a, b, c, d, e, f]
dans les Initial
valeurs et mes contraintes sont:
a<=e<=1.4*a ('e' varies from a to 1.4*a)
b<=f<=1.4*b ('f' varies from b to 1.4*b)
c>d ('c' must always be greater than d)
Mais cela ne fonctionne pas correctement. Je ne sais pas quelle est l'erreur. Existe-t-il un meilleur moyen de transmettre mes contraintes en tant que fonction? S'il vous plaît aidez-moi.
Je ne sais pas numpy, mais sont a et b négatif? Sinon, je ne peux pas voir comment les valeurs de e et f peuvent satisfaire 1.4 * a <= e <= a et 1.4 * b <= f <= b. – hughdbrown
Il serait utile que vous indiquiez clairement ce que vous faites exactement, ce que vous voulez faire, et ce qui se passe réellement, au lieu de simplement coller un fragment de code. – MAK
@pear, j'ai essayé de répondre à votre question, mais comme le dit hughdbrown, les contraintes dans votre code ci-dessus ne semblent pas fonctionner pour des nombres positifs. Peut-être que les signes sont en arrière sur les deux premiers? –