給定一個矩陣,我想找到儘可能接近某些目標向量的行的線性組合。另外,我想行權重是非負的,總和爲1.我試着用limSolve軟件包來解決這個問題,但是它報告了一個關於矛盾不等式的錯誤。這裏是我的功能:在limSolve包中,LSEI錯誤:不等式矛盾
library(limSolve)
find.weights <- function(target.vector, a.matrix) {
# parameters to the objective function
A <- t(a.matrix)
B <- target.vector
# equality constraint (weights sum to 1)
E <- matrix(rep(1, nrow(a.matrix)), nrow = 1)
F <- 1
# inequality constraints (all weights nonnegative)
G <- diag(1, nrow(a.matrix))
H <- rep(0, nrow(a.matrix))
lsei(A = A, B = B, E = E, F = F, G = G, H = H)
}
這是導致問題的輸入。
target.vector:
[1] 0.00 0.30 0.10 0.15 0.15 0.15 0.00 0.15 0.00
a.matrix:
[1,] 0.0000000000 1.0000000 0.000000000 0.0000000 0.00000000 0.0000000 0.000000000 0 0
[2,] 1.0000000000 0.0000000 0.000000000 0.0000000 0.00000000 0.0000000 0.000000000 0 0
[3,] 0.0000000000 0.0000000 0.000000000 0.0000000 0.00000000 0.0000000 0.000000000 1 0
[4,] 0.0000000000 0.0000000 0.000000000 0.0000000 0.00000000 1.0000000 0.000000000 0 0
[5,] 0.0000000000 0.6318000 0.044100000 0.2241000 0.01000000 0.0900000 0.000000000 0 0
[6,] -0.0069249820 0.4961489 0.030322369 0.1164405 0.03519697 0.3167728 0.012043447 0 0
[7,] 0.0410533877 0.2434423 0.007709501 0.0292961 0.06651868 0.5986681 0.013311866 0 0
[8,] 0.0000000000 0.0000000 0.240000000 0.7600000 0.00000000 0.0000000 0.000000000 0 0
[9,] -0.0001006841 0.6229848 0.051032756 0.1945897 0..1112761 0.007853359 0 0
當我打電話與這些輸入的功能,收到上述錯誤:
> result <- find.weights(target.vector, a.matrix)
Warning message:
In lsei(A = A, B = B, E = E, F = F, G = G, H = H) :
LSEI error: inequalities contradictory
然而,該功能似乎工作正常,如果我限制行數或列數:
> result <- find.weights(target.vector, a.matrix[1:8,]) # OK
> result <- find.weights(target.vector[1:6], a.matrix[,1:6]) # OK
> result <- find.weights(target.vector[1:7], a.matrix[,1:7]) # NOPE
Warning message:
In lsei(A = A, B = B, E = E, F = F, G = G, H = H) :
LSEI error: inequalities contradictory
任何意見,將不勝感激。當通過E
,F
,G
指定線性約束和H
限定非可行問題