У меня есть следующая матрица R, которая является комбинацией подматриц 2x3 и 3x3, и это может быть более 2 подматриц с различным измерением (например, m1xp и m2xp и m3xp, где каждый из m1, m2, m3 <= p) </p>
A2 <- list(rbind(c(1,1,1),c(-1,1,-1)),
rbind(c(-1,1,1),c(1,-1,2),c(2,-1,2)))
library(Matrix)
A2 <- as.matrix(Matrix::bdiag(A2))
Rhs <- matrix(c(0,5,0.5,4),nrow = 4)
beta <- c(rep(1.2,3),c(0.5,0.2,0.1))
> A2
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 1 0 0 0
[2,] -1 1 -1 0 0 0
[3,] 0 0 0 -1 1 1
[4,] 0 0 0 1 -1 2
[5,] 0 0 0 2 -1 2
Я бы хотел получить комбинацию всех индексов строк между первой подматрицей и второй подматрицей для решения задачи линейной оптимизации. Комбинация должна быть из обеих подматриц, затем найти новую бета-версию и затем проверить, удовлетворяется ли условие Aq %*% beta == Rhs
, остановить. Если нет, тогда возьмите другую комбинацию. Я думаю, что ниже все комбинации строк между субматрицами:
Комбинация как одна из первой субматрицы и одна из второй субматрицы
Aq <- A2[c(1,3),]
Aq <- A2[c(1,4),]
Aq <- A2[c(1,5),]
Aq <- A2[c(2,3),]
Aq <- A2[c(2,4),]
Aq <- A2[c(2,5),]
Затем комбинация как одна из первой и 2 из второй матрицы
Aq <- A2[c(1,3,4),]
Aq <- A2[c(1,3,5),]
Aq <- A2[c(1,4,5),]
Aq <- A2[c(2,3,4),]
Aq <- A2[c(2,3,5),]
Aq <- A2[c(2,4,5),]
Затем комбинация как одна из первой и 3 из второй матрицы
Aq <- A2[c(1,3,4,5),]
Aq <- A2[c(2,3,4,5),]
Затем комбинация как 2 из первой и одной из второй матрицы
Aq <- A2[c(1,2,3),]
Aq <- A2[c(1,2,4),]
Aq <- A2[c(1,2,5),]
Затем комбинация как 2 из первой и 2 из второй матрицы
Aq <- A2[c(1,2,3,4),]
Aq <- A2[c(1,2,3,5),]
Aq <- A2[c(1,2,4,5),]
Затем комбинация как 2 из первой и 3 из второй матрицы
Aq <- A2[c(1,2,3,4,5),]
Есть ли лучший способ получить все комбинации?
Затем я хотел бы создать цикл, который выбирает по одному на вышеуказанную комбинацию за раз и проверить, если
if (Aq %*% beta == Rhs) {
break
} else {
TAKE ANOTHER COMBINATION Aq
}
Обратите внимание, у меня может быть более 2 подматриц, которые создают блочную матрицу. Затем я должен создать все комбинации строк между первой, второй и третьей матрицами. Я надеюсь, что есть простой способ сделать это в R. Я попробовал функцию grid.expand, но она не дает мне желаемого результата.