Минимизация пользовательской функции с учетом ограничений с помощью costrOptim - PullRequest
0 голосов
/ 03 марта 2019

Я написал функцию A = function(W)(....), которая вычисляет риск-стоимость портфеля из 12 активов как функцию W = [W1, ....., W12], то есть вектора весов.(это не обычный VAR, он имеет много циклов внутри, он вычисляет скользящую меру и затем сводит ее к одному значению, то, что я хочу минимизировать)

То, что я пытаюсь сделать, эточтобы минимизировать эту функцию, используя ограничения, такие как:

  • векторное произведение W и ERV = 0,002, где ERV = [r1, ...., r12], поэтому я хочу исправить ожидаемый доходпортфеля
  • сумма wi для i = 1, ..., 12 должна быть равна 1
  • Wi> = 0 для i = 1, ...., 12

То, что я сделал, было:

constrOptim(theta = WW, A, grad = jacobian(A, W, method = "Richardson", side = NULL), ui=U, ci = C, method = c("Nelder_Mead", "BFGS", "CG", "L-BFGS", "SANN", "Brent"), hessian = FALSE)

где:

U = matrix(c(ERV,-ERV, rep(-1,12), rep(1,12), diag(x=1,12,12)),ncol=12, byrow =TRUE)

C = matrix(c(0.0019,-0.0021, -1.01, 0.99, rep(0,12)))

Проблема в том, что это занимает так много времени, и я не знаю, есть ли более быстрыйспособ сделать это, и если я делаю это правильно.Кроме того, я получил следующее: «предупреждающее сообщение: in if (method ==« SANN ») [: условие имеет длину> 1, и будет использоваться только первый элемент

...