假设我具有以下功能:
import scipy
def fitness(w, assets, rf=0., dt='2016-12-30'):
mu = float(ptf_mean(assets,w,dt))
sigma = float(ptf_var(assets,w,dt))
sigma_sum = sigma.sum()
util = -(mu - rf) / (sigma)
return util
并且:
b_ = [(0.,1.) for i in range(2)]
c_ = ({'type':'eq', 'fun': lambda w: sum(w)-1. })
optimized = scipy.optimize.minimize(fitness, np.matrix([1.,0.]), (assets, rf, dt),
method='SLSQP', constraints=c_,bounds=b_)
现在,假设我想约束sigma_sum
。我该怎么做呢?我在文档中看到的所有约束示例在示例中仅变化x0
或w
。
我省去了定义assets
,rf
和dt
的原因,因为它们实际上与问题无关,但假定代码已编译。
谢谢!
答案 0 :(得分:0)
sigma_sum
是w
(和参数)的函数。约束意味着约束w
以便sigma_sum
满足某些条件。这涉及到有一个可调用的函数,它返回涉及sigma_sum
的值,例如:
c2_ = ({'type':'eq', 'fun': lambda w: sigma_sum(w) - 42})
其中sigma_sum
是由
def sigma_sum(w, assets, rf=0., dt='2016-12-30'):
mu = float(ptf_mean(assets,w,dt))
sigma = float(ptf_var(assets,w,dt))
return sigma.sum()
为避免代码重复,您可能希望在计算目标的函数中使用此sigma_sum
。