关于Scipy的问题-最小化。添加其他约束

时间:2019-12-19 18:23:12

标签: optimization scipy scipy-optimize

我正在尝试使用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最小化不是很熟悉,如果有人可以帮助我,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

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在最小化问题中的任何地方都没有使用。

答案 1 :(得分:0)

限制投资组合中工具数量的约束称为基数约束。这导致具有离散变量的模型。通常使用 MIQP (混合整数二次规划)求解器来解决这类投资组合模型。 MIQP解算器可轻松用于Python,但SciPy没有解算器。