Итерация и изменение последовательности - PullRequest
0 голосов
/ 29 июня 2018

Пожалуйста, смотрите прикрепленный код

A <- matrix(c(1,1,1,-1,1,-1,2,3,-1,2,-1,-2),nrow = 4,byrow = TRUE)
b <- matrix(c(0,5,2,4),nrow = 4)
beta <- c(0,5,3)
r <- nrow(A)
iTBD <- 2

s <- seq_len(r)[-i]

for(iWs in s){
  Aq <- A[iWs, ,drop=FALSE]
  print(Aq)
  bq <- b[iWs, ,drop=FALSE]
  m <- nrow(Aq)
  is.ind <- sum(Aq%*%beta) == sum(bq)
  print(iWs)
  print(is.ind)
  if(is.ind) break
}

Я реализую алгоритм, где

1) Я должен выбрать каждую строку матрицы A, которой нет в iTBD, и

а) проверить, выполнено ли условие, затем прервать

б) если условие не выполняется, мне нужно создать все возможные разные сочетание строк, таких как с (1,3), с (1,4), с (3,4) и запустить цикл for еще раз, если условие выполнено, остановитесь на определенной комбинации строк

в) если (а) и (б) не сработали, тогда я должен взять полную комбинацию строк с (1,3,4) и проверить состояние если (1) не удовлетворяет условию, перейдите к шагу (2)

2) Добавить iTBD к строкам и

a) возьмите комбинацию из 2 строк, отсутствующую в (1.a), и проверьте, что условие выполнено, если не переходите к шагу b ниже

b) возьмите все комбинации из 3 строк, которых нет в (1.c), и проверьте условие встретились, если не перейти к шагу c белво

в) взять полную матрицу А и проверить условие

У меня проблема в том, как я могу использовать комбинацию в цикле? Я имею в виду сначала взять каждую строку отдельно, затем взять комбинацию из 2 строк и так далее, пока не будет выполнено условие?

Спасибо

1 Ответ

0 голосов
/ 29 июня 2018

Я не могу полностью понять ваш вопрос, но эта информация наверняка вам поможет.
Вы можете использовать эту функцию library(combinat) для генерации всех комбинаций по одному в цикле.
Каждый столбец матрицы представляет уникальную комбинацию, берущую i (здесь i = 2) элемента из вектора c (1,2,3,4,5) за один раз.

Теперь вы можете использовать их для получения желаемых результатов.

for (i in 1:n){

combinat::combn(x = c(1,2,3,4,5), m = i) # store the combinations in a list and use accordingly.
}

#>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> [1,]    1    1    1    1    2    2    2    3    3     4
#> [2,]    2    3    4    5    3    4    5    4    5     5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...