Что я делаю не так с этой проблемой максимизации? - PullRequest
0 голосов
/ 15 февраля 2019

Я получаю ошибку ValueError: формы (6,) и (1,6) не выровнены: 6 (dim 0)! = 1 (dim 0).Ошибка возникает, когда я выполняю задачу максимизации в строке 23. Знаете ли вы, что я могу изменить в этом коде, чтобы заставить вещи работать?

Я пытался изменить формы этих векторов и матрицы несколько раз, но япродолжайте получать эту ошибку или ошибка «невозможно вызвать матричный объект».

ETFs_mu - это вектор 6 на 1

cov_matrix - матрица 6 на 6

# Case 2: No borrowing

# The objective function maximizes the expected return of the portfolio 
def objective_func(w,ETFs_mu,risk_free):
    w = np.empty((6,1))
    return -(np.dot(np.transpose(w),ETFs_mu) + (1-np.sum(w))*risk_free)

# Define constraint: sigma = .15
def constraint1(w):
    pf_sigma = np.sqrt(np.dot(np.transpose(w), np.matmul(cov_matrix,w)))
    return .15 - pf_sigma

# Define constraint: no access to risk-free
def constraint2(w):
    return 1.0-np.sum(w)    # Define constraint: all the weights + risk free sum up to one

# Load constraints into dictionary form
cons1 = {'type':'ineq','fun':constraint1}
cons2 = {'type':'eq','fun':constraint2}

cons = (cons1,cons2)

res3 = opt.minimize(objective_func, (.1,.1,.1,.1,.1,.1), args=(ETFs_mu,risk_free), constraints=cons)

res3

Эта задача предназначена для определения веса этого портфеля, состоящего из 6 активов.Мы не можем использовать безрисковую ставку, поэтому ее вес должен быть равен 0. Стандартное отклонение портфеля меньше или равно 15%.Выходными данными должен быть вектор желаемых весов, максимизирующий целевую функцию (ожидаемый доходный портфель) с учетом ограничений.

...