Python(scipy)の最適化関数に関していくつかの助けが必要です。問題はf(x)
を最適化することです_x=[a,b,c...n]
_。制約は、a、bなどの値が0から1の間である必要があること、およびsum(x)==1
です。 scipy.optimise.minimize関数は微分を必要としないため、最も良いようです。引数を渡すにはどうすればよいですか?
順列を使用したndarrayの作成は長すぎます。以下の私の現在のコード:-
_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
_
docs にあるように、COBYLA
またはSLSQP
を使用して制約付き最適化を行うことができます。
from scipy.optimize import minimize
start_pos = np.ones(6)*(1/6.) #or whatever
#Says one minus the sum of all variables must be zero
cons = ({'type': 'eq', 'fun': lambda x: 1 - sum(x)})
#Required to have non negative values
bnds = Tuple((0,1) for x in start_pos)
これらを組み合わせて最小化関数にします。
res = minimize(getSharpe, start_pos, method='SLSQP', bounds=bnds ,constraints=cons)