scipy约束非x0参数

时间:2018-08-24 17:21:38

标签: python scipy

假设我具有以下功能:

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。我该怎么做呢?我在文档中看到的所有约束示例在示例中仅变化x0w

我省去了定义assetsrfdt的原因,因为它们实际上与问题无关,但假定代码已编译。

谢谢!

1 个答案:

答案 0 :(得分:0)

sigma_sumw(和参数)的函数。约束意味着约束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