проверьте пакет quadprog
.Он имеет функцию solve.QP
для решения следующего квадратичного программирования:
min (-d ^ T b + 1/2 b ^ TD b) с ограничениями A ^ T b> = b_0.
В вашем случае D = H * 2, d = 0.
Вот как вы можете построить матрицу A и вектор b0 для вашей задачи:
Amat <- t(rbind(rep(1, n), diag(1, 20), -diag(1, 20))
b0 <- c(1, rep(0, 20), rep(-1, 20))
Тогда вы можетеrun
library(quadprog)
solve.QP(Dmat = 2*H, dvec = 0, Amat = Amat, bvec = b0, meq = 1)
Обратите внимание, что meq = 1
указывает, что первое неравенство должно быть равенством.
Если вам нужны только оптимальные значения x
, попробуйте следующее:
solve.QP(Dmat = 2*H, dvec = 0, Amat = Amat, bvec = b0, meq = 1)$solution
Надеюсь, это поможет.