получение "None" в результате метода решения в cvxpy - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь оптимизировать проблему с помощью пакета 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...