Вы можете сделать это, используя следующую модель:
min r'r
r = X'b - y
b >= 0
sum(b) = 1
r free
, где b - параметры для оценки, а r - невязки. Оба b и r являются переменными решения. Эта проблема всегда выпукла (т.е. Q = I всегда положительно определена), даже если n
Тем не менее, Quadprog может все еще не нравиться (я думаю, что ему нужна матрица строго по умолчанию, в отличие от большинства решателей QP). Исправьте это, изменив D на:
D = [ 0.0001*I 0 ]
[ 0 I ]
Код R может выглядеть следующим образом:
#
#
# b = [b] (P)
# [r] (N)
#
# D = [ 0 0 ]
# [ 0 I ]
#
# d = [0]
# [0]
#
# A' = [ 1' 0' ]
# [ I 0 ]
#
# b0 = [1]
# [0]
#
# fudge left upper sub matrix
D = rbind( cbind( 0.0001*diag(P), matrix(rep(0,P*N),nrow=P,ncol=N)),
cbind( matrix(rep(0,N*P),nrow=N,ncol=P), diag(N) )
)
d = rep(0, P+N)
A = rbind( cbind( matrix(rep(1,P),nrow=1), matrix(rep(0,N),nrow=1)),
cbind(diag(P),matrix(rep(0,P*N),nrow=P,ncol=N)))
b0 = rbind( matrix(c(1),nrow=1,ncol=1), matrix(rep(0,P),nrow=P,ncol=1))
solve.QP(Dmat = D, dvec = d , Amat = t(A), bvec = b0, meq = 1)