【问题标题】:Question on Scipy - Minimize. Adding additional constraints关于 Scipy 的问题 - 最小化。添加额外的约束
【发布时间】:2019-12-21 14:55:15
【问题描述】:

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

【问题讨论】:

    标签: optimization scipy scipy-optimize


    【解决方案1】:

    怎么样

    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。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的回复。您会为 MIQP 求解器推荐哪个库? cvxpy?
      • Cvxpy 不是求解器,而是建模工具。它支持一些优秀的 MIQP 求解器。
      猜你喜欢
      • 2013-12-03
      • 2016-05-27
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      相关资源
      最近更新 更多