Я пытаюсь оптимизировать проблему с помощью пакета cvxpy, но не получаю никаких возвращаемых значений, и я не уверен, что делаю неправильно. Я использую следующий код:
weights = cp.Variable(6)
risk = cp.quad_form(weights,cov)
allocation_objective = cp.Minimize(risk)
allocation_constraints = [
cp.sum(weights) == 1,
(e_r.T @ weights)[0] == 0.3
]
weight_bounds = (0,1)
allocation_constraints.extend(
[
weights >= weight_bounds[0],
weights <= min(weight_bounds[1], 1)
]
)
problem = cp.Problem(
objective=allocation_objective,
constraints=allocation_constraints
)
problem.solve()
Где cov относится к ковариационной матрице доходности активов 6x6. Когда этот код выполняется, weights.value равен None, а строка problem.solve () возвращает "inf".
Мне было интересно, может ли кто-нибудь увидеть, где эта проблема пошла не так и почему я получаю свои веса. Значение возвращается Нет.
РЕДАКТИРОВАТЬ: Добавлена трассировка ошибок:
ValueError Traceback (most recent call last)
<ipython-input-64-638c59b13788> in <module>
3 print(mean_returns)
4 print(6)
----> 5 mvo.plot_efficient_frontier(covariance=cov, expected_asset_returns=mean_returns, num_assets=6)
/anaconda3/lib/python3.7/site-packages/mlfinlab/portfolio_optimization/mean_variance.py in plot_efficient_frontier(self, covariance, expected_asset_returns, num_assets, min_return, max_return, risk_free_rate)
321 expected_returns=expected_returns,
322 target_return=portfolio_return,
--> 323 num_assets=num_assets)
324 volatilities.append(risk)
325 returns.append(portfolio_return)
/anaconda3/lib/python3.7/site-packages/mlfinlab/portfolio_optimization/mean_variance.py in _min_volatility_for_target_return(self, covariance, expected_returns, target_return, num_assets)
291 problem.solve()
292 if weights.value is None:
--> 293 raise ValueError('No optimal set of weights found.')
294 return weights.value, risk.value ** 0.5, target_return
295
ValueError: No optimal set of weights found.