如何解决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 举报,一经查实,本站将立刻删除。