2012-02-01 149 views
1

給定一個矩陣,我想找到儘可能接近某些目標向量的行的線性組合。另外,我想行權重是非負的,總和爲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 

任何意見,將不勝感激。當通過EFG指定線性約束和H限定非可行問題

回答

0

LSEI error: inequalities contradictory

發生。換句話說,當沒有矢量x可以同時解決所有的約束條件時E %*% x == FG %*% x >= H。例如,考慮一個會限制兩個變量x1x2的問題,使得x1 + x2 == -1,而x_1 >= 0x2 >= 0。顯然,沒有x1x2的值可以滿足所有三個約束條件,並且問題是不可行的。

在你的問題,其中n是變量求解數,所有您所請求的是x_1x_2,...,x_n非負,他們和爲1。一個可行的解決方案(無限多假設n > 1)是挑x_1 = 1x_2 = ... = x_n = 0。所以先驗,lsei不應該拋出你提到的錯誤。事實上,您的代碼在我的機器上運行良好,我無法重現您所看到的錯誤。是否有可能得到了與您在此發佈的代碼不同的錯誤代碼?