Добавление ограничения к функции - PullRequest
0 голосов
/ 14 мая 2018

У меня есть функция, предназначенная для оптимизации портфеля. Мне нужно добавить ограничение на его часть, а не параметры

pps = function(x, wb, nt, ret, m12, mktcap, btm, rr){
  wi = wb + nt * (x[1]*m12 + x[2]*mktcap + x[3]*btm)
  wret = rowSums(wi*ret,na.rm=TRUE)
  ut = ((1 + wret)^(1 - rr))/(1 - rr)
  u = -mean(ut)
  return(u)
}

Функция запускается через optim для поиска параметров. Я хочу добавить ограничение к wi, чтобы сумма wi для каждой итерации равнялась 0. Все решения, которые я нашел здесь, ограничивают параметры, и я не смог применить ни одно из них к мой код

res_save = matrix(NA, 330, 3)
weights = matrix(NA, 330, ncol(ret))
for(i in 1:330){
  opt = optim(c(0, 0, 0), pps, wb = wb, nt = nt, ret = ret[1:(48 + i), ],
          m12 = m12[1:(48 + i), ], mktcap = mktcap[1:(48 + i), ],
          btm = btm[1:(48 + i), ],
          rr = rr, method = "BFGS")
  res = opt$par
  w = wb + nt*(res[1]*m12[i + 49, ] + res[2]*mktcap[i + 49, ] + res[3]*btm[i + 49, ])
  weights[i, ] = w
  res_save[i, ] = res
}

Кто-нибудь может мне помочь с этим?

Большое спасибо! (ps код не мой, это из insightR)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...