微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

args 在 scipy 优化中究竟做了什么

如何解决args 在 scipy 优化中究竟做了什么

我一直在听一门讲授投资组合优化的课程,在马科维茨优化器中,我注意到其中一个约束

def minimize_vol(target_return,er,cov):
    """
    target_ret ---> W (weight vector)
    """
    n = er.shape[0]
    init_guess = np.repeat(1/n,n)

    bounds = ((0.0,1.0),) * n

    return_is_target = {
        "type":"eq","args": (er,),"fun": lambda weights,er: target_return - portfolio_return(weights,er)
    }
    weights_sum_to_1 =  {
        "type": "eq","fun": lambda weights: np.sum(weights) - 1
    }
    results = minimize(portfolio_vol,init_guess,args=(cov,method="SLSQP",options={"disp":False},constraints=(return_is_target,weights_sum_to_1),bounds=bounds)
    
    return results.x

一个约束字典中的“args”究竟是做什么的?我无法清楚地了解文档。 对不起,如果这是一个愚蠢的问题,我对 python 这些库真的很陌生

解决方法

除了参数/权重之外,您还可以向目标函数以及定义约束的函数传递其他参数。

    return_is_target = {
      "type":"eq","args": (er,),"fun": lambda weights,er: target_return - portfolio_return(weights,er)
    }

定义约束的函数是lambda weights,er)。它需要一个额外的参数,即 er。使用 args 键,您可以将此附加参数传递给该函数。

但是,在这种特殊情况下,您可以将函数定义中的 er 固定如下:

    return_is_target = {
      "type":"eq","fun": lambda weights: target_return - portfolio_return(weights,er)
    }

现在 er 不再是约束的参数,因此不需要通过 args 传递。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。