gpt4 book ai didi

python - SciPy 可以使用 SLSQP 最小化来处理多个非线性约束吗?

转载 作者:行者123 更新时间:2023-12-01 07:40:05 25 4
gpt4 key购买 nike

我试图在约束下找到最佳解决方案,并将 SciPy 最小化与 SLSQP 结合使用。它可以完美地工作,没有任何单一约束的问题。一旦我添加另一个约束,它就会成功完成,但没有达到优化目标。

我假设我的问题与约束函数定义有关(约束 2 有点棘手),并决定学习如何正确使用最小化。

我切换到简单的第二个约束,但再次得到了未优化的解决方案。

待优化的功能:年样本 = 246.5

def get_portfolio_ann_risk(weights, assets_returns_daily, samples_in_year):
samples_in_data = len(assets_returns_daily)
cov_matrix = np.cov(assets_returns_daily, rowvar=False, ddof=0)
weights = np.array([weights])
weights_mat = np.dot(weights.T, weights)
daily_var = np.sum(weights_mat * cov_matrix) * (samples_in_data /(samples_in_data - 1))
daily_risk = np.sqrt(daily_var)
return daily_risk * np.sqrt(samples_in_year)

功能优化输入:

minimal_risk_optimization_data = (assets_returns_daily, samples_in_year)
asset_weight_max = 1
asset_weight_min = 0

bounds = ((asset_weight_min, asset_weight_max),) * asset_count

限制:

two_constrain_opt_cons = (
{'type': 'eq', 'fun': lambda weights: 0.5 - np.max(weights)},
{'type': 'eq', 'fun': lambda weights: 1.0 - np.sum(weights)}
)

优化功能

two_constrain_opt = minimize(get_portfolio_ann_risk, market_weights, method='SLSQP',
args=minimal_risk_optimization_data,
constraints=two_constrain_opt_cons,
bounds=bounds,
options={'maxiter': 250, 'ftol': 1e-09}
)

单独使用这些约束中的每一个,它都可以正常工作,但我无法使其同时适用于它们。我相信,如果我能够解决“更简单”的问题,我就能够优化真正的问题。

每个约束优化的结果都是正确的,两个约束问题的结果是默认使用的权重(初始猜测)

最佳答案

已解决:显然,问题出在最初的猜测上。它满足:

{'type': 'eq', 'fun': lambda weights: 1.0 - np.sum(weights)}

约束。

我改变了最初的猜测,使其不满足约束条件(将其乘以 0.85),它的效果就像一个魅力。

解决方案:

two_constrain_opt = minimize(get_portfolio_ann_risk, market_weights * 0.85, method='SLSQP',
args=minimal_risk_optimization_data,
constraints=con,
bounds=bounds,
options={'maxiter': 250, 'ftol': 1e-09}
)

关于python - SciPy 可以使用 SLSQP 最小化来处理多个非线性约束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56764083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com