首页 > 解决方案 > 关于 Scipy 的问题 - 最小化。添加额外的约束

问题描述

我正在尝试使用scipy minimize函数进行以下优化:

V = np.matrix(pd.read_csv('V.csv'))`

R = np.matrix(pd.read_csv('R.csv', index_col = 'Ticker'))`

w0= list()
for i in range(0, 84):
    w0.append(1/84)

def calculate_portfolio_var(w,V):
    w = np.matrix(w)
    return (w*V*w.T)[0,0]

cons = ({'type': 'eq', 'fun': lambda x:  np.sum(x)-1.0})
myBound = [(0, 1) for i in range(0, 84)]
res= minimize(calculate_portfolio_var, w0, args=V, method='SLSQP',constraints=cons, bounds = myBound)

其中V是方差-协方差矩阵,R是股票年化收益率的序列。

除了 2 个约束 (consmyBound) 之外,我还想要一个额外的约束,即结果投资组合收益(结果权重和股票收益的加权平均值)等于某个数量并且股票数量小于等于一定数。。

例如,它应该如下所示:

cons = ({'type': 'eq', 'fun': lambda x:  np.sum(x)-1.0},
        {'type': 'eq', PortfolioReturn = 10%,
        {'type': 'ineq', number of result stocks <= 40)

我对 Scipy 最小化不太熟悉,如果有人可以帮助我,我将不胜感激。

标签: optimizationscipyscipy-optimize

解决方案


关于什么

constraints=({'type': 'eq', 'fun': lambda x:  np.sum(x) - 1.0},
             {'type': 'eq', 'fun': calculate_portfolio_var(x, V) - 0.1, 'args':V})

投资组合回报?对于结果股票的数量,您介意解释它与哪个变量相关吗?我的意思是,它看起来像是 R,但在最小化问题的任何地方都没有使用 R。


推荐阅读