Итак, я скоро поработаю с R, и мне нужно научиться им пользоваться. Я подумал, что хорошим упражнением будет попытка написать программу, которая использует матрицу выигрышей и выполняет итеративную ликвидацию доминирующих стратегий (если вы не знаете, о чем я говорю, это очень простой материал по теории игр и не очень важный для вопрос). Первым шагом было написание функции, которая берет матрицу и возвращает сводку всех стратегий, в которых доминируют, но что-то идет не так.
strictdomlist <- function(m) {
# takes a matrix, determines if row player has strictly
# dominated strategies
strategies <- dim(m)[1]
dominatingstrategies <- list()
for (i in 1:strategies) {
dstrat <- 0
for (j in 1:strategies) {
if (i != j) {
if (all(m[i, ]<m[j, ])) dstrat <- c(dstrat,j)
}
}
dominatingstrategies[i] <- dstrat
}
return(dominatingstrategies)
}
Все (что я хочу) это проверка каждой строки, чтобы увидеть, есть ли строка, в которой есть записи, которые все больше. Если есть, он должен поместить номер этой строки в вектор, а затем в конце назначить этот вектор i-й позиции в доминирующих стратегиях. Если я дам ему эту матрицу:
[,1] [,2] [,3] [,4]
[1,] 1 4 2 10
[2,] 2 5 9 11
[3,] 0 1 1 1
[4,] 16 7 10 12
Я хочу, чтобы это вернуло мне:
[[1]]
[1] 2 4
[[2]]
[1] 4
[[3]]
[1] 1 2 4
[[4]]
[1] 0
Но то, что он дает мне:
> strictdomlist(m2)
[[1]]
[1] 4
[[2]]
[1] 4
[[3]]
[1] 4
[[4]]
[1] 0
Warning messages:
1: In dominatingstrategies[i] <- dstrat :
number of items to replace is not a multiple of replacement length
2: In dominatingstrategies[i] <- dstrat :
number of items to replace is not a multiple of replacement length
3: In dominatingstrategies[i] <- dstrat :
number of items to replace is not a multiple of replacement length
Кто-нибудь может увидеть, что я делаю не так? И, если есть лучший способ сделать это в R, вы можете помочь?
Спасибо!