1

Я немного новичка и в процессе перемещения алгоритма, который работает с минимальной оптимизацией дисперсии от scipy.minimize.optimize (который не работает должным образом), чтобы CVXPY.ValueError в функции minization CVXPY (минимальное отклонение Optimization)

R ожидаемые доходы, C в coveriances и rf безрисковая ставка. w являются оптимальными весами и r различные средства вдоль эффективной границы, для которых вычисляются весовые коэффициенты.

Когда я запускаю этот код я получаю:

ValueError: setting an array element with a sequence. 

Я считаю, что вар виноват здесь, но я не знаю, как еще структурировать. Insight очень ценится. Кроме того, остальная часть кода может иметь дополнительные ошибки, поэтому, если вы заметите, пожалуйста, укажите их!

def solve_frontier(R, C, rf, context): 
     frontier_mean, frontier_var, frontier_weights = [], [], [] 
     n = len(R) 
     w = cvx.Variable(n) 
     r = cvx.Parameter(sign='positive') 
     mean_1 = sum(R*w) 
     var = dot(dot(w, C), w) 
     penalty = (1/100)*abs(mean_1-r) 

     prob = cvx.Problem(cvx.Minimize(var + penalty), 
         [sum(w)-context.allowableMargin == 0]) 

     r_vals = linspace(max(min(R), rf), max(R), num=20) 
     for i in range(20): 
      r.value = r_vals[i] 
      prob.solve() 
      frontier_mean.append(r) 
      frontier_var.append(compute_var(prob.value, C)) 
      frontier_weights.append(prob.value) 
      print "status:", prob.status 
     return array(frontier_mean), array(frontier_var), frontier_weights 
+0

Ошибка должна указывать точно, в какой строке возникает проблема. Пожалуйста, получите эту информацию. Также, если вы прочитаете [минимальные полные проверяемые вопросы] (http://stackoverflow.com/help/mcve) и улучшите свой вопрос, он, вероятно, получит лучший ответ в дополнение к тому, чтобы быть более полезным для будущих пользователей. – KobeJohn

+0

Я использую ipython-ноутбук, и на самом деле он не говорит о том, какая строка является проблематичной. Я попробую сделать его mcv. –

+0

Эта часть выглядит подозрительной для меня '[sum (w) -context.allowableMargin == 0]'. Вы действительно собираетесь передавать один логический список в качестве аргумента? Если не то, что вы намерены? Кроме того, вы говорите, что приведенный выше код печатает ошибку значения, о которой вы упомянули? Если это так, этот класс 'Problem' является странным для скрытия необработанной ошибки, и вы захотите сосредоточиться на том, что происходит в этом классе. – KobeJohn

ответ

1

Проблема заключалась в frontier_mean.append(r), которые должны были frontier_mean.append(r.value).

 Смежные вопросы

  • Нет связанных вопросов^_^