使用 scipy.optimize.minimize 最小化函数时的输入形状问题

问题描述 投票:0回答:0

我正在尝试使用 scipy.optimize.minimize 最小化资产组合的风险度量。这是通过改变每项资产的权重来最小化风险度量(在本例中称为 ES)来实现的。我已经成功尝试了 scipy.optimize 几次,但是当我运行优化器时,它会将我的权重向量变成一个数字,我不知道为什么......

我设置了任意权重,当我在要最小化的函数中打印权重时,它显示为单个数字

代码:

def ES_calc_sum(pi_bad, weights, mu_good_vector, mu_bad_vector, cov_good_matrix, cov_bad_matrix, alpha):

    print(weights)
    sum = np.sum(risk_contribution(pi_bad, weights, mu_good_vector, mu_bad_vector, cov_good_matrix, cov_bad_matrix, alpha))

    return sum

weights = np.array([0.5,0.25,0.25])

def RC_minimizer(target_vol, weights, pi_bad, mu_good_vector, 
    mu_bad_vector, cov_good_matrix, cov_bad_matrix, alpha):

     bnds = Bounds(0, 1)
     cont = ({"type": "eq", "fun": lambda x: np.sum(x) - 1},
            {"type": "eq", "fun": lambda x: ((1 - pi_bad) * np.sqrt(x @ cov_good_matrix @ x) + pi_bad * np.sqrt(x @ cov_bad_matrix @ x) - target_vol})

     res = minimize(ES_calc_sum, x0 = weights, args = (pi_bad, mu_good_vector, mu_bad_vector, cov_good_matrix, cov_bad_matrix, alpha), method="SLSQP", bounds=bnds, constraints=cont, tol=0.0001)

     w_opt = res.x

     return w_opt

错误:

ValueError: matmul: Input operand 1 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)

帮助将不胜感激,因为此代码将用于我的硕士论文

尝试在不断变化的权重下最小化度量。

python optimization scipy portfolio scipy-optimize-minimize
© www.soinside.com 2019 - 2024. All rights reserved.