Comment utiliser une fonction de minimisation dans scipy avec des contraintes
J'ai besoin d'aide concernant l'optimisation des fonctions en python(scipy)
le problème, c'est l'optimisation de f(x)
où x=[a,b,c...n]
. les contraintes sont que des valeurs de a,b, etc ... doivent être entre 0 et 1, et sum(x)==1
. Le scipy.optimiser.minimiser la fonction semble meilleur car il ne nécessite pas de différentiel. Comment puis-je passer les arguments?
La création d'un ndarray à l'aide de permutation est trop long. Mon présent code comme ci-dessous:-
import itertools as iter
all=iter.permutations([0.0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1.0],6) if sum==1
all_legal=[]
for i in all:
if np.sum(i)==1:
#print np.sum(i)
all_legal.append(i)
print len(all_legal)
lmax=0
sharpeMax=0
for i in all_legal:
if sharpeMax<getSharpe(i):
sharpeMax=getSharpe(i)
lmax=i
source d'informationauteur anand
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire une optimisation sous contrainte avec
COBYLA
ouSLSQP
comme il est dit dans le docs.Combiner ces dans la minimisation de la fonction.
Vérifier
.minimize
docstring:Ce qui importe le plus dans votre cas ce sera la
bounds
. Lorsque vous souhaitez limiter votre paramètre dans [0,1] (ou (0,1)?) Vous avez besoin de la définir pour chaque variable, tels que:Maintenant, l'autre partie,
sum(x)==1
. Il y a peut-être plus élégante des façons de le faire, mais pensez à ceci: au lieu de se réduiref(x)
vous pouvez minimiser lesh=lambda x: f(x)+g(x)
une nouvelle fonction essentiellef(x)+g(x)
oùg(x)
est une fonction atteint son minimum lorsquesum(x)=1
. Commeg=lambda x: (sum(x)-1)**2
.Le minimum de
h(x)
est atteint lorsque les deuxf(x)
etg(x)
sont à leur minimum. Une sorte de cas de la méthode des multiplicateurs de Lagrange http://en.wikipedia.org/wiki/Lagrange_multiplier