Ошибка в присваивании, максимизирующем минимальное качество на языке R из примера книги

#r #linear-programming

#r #линейное программирование

Вопрос:

Я пытался запустить пример, приведенный в учебнике под названием «Моделирование и решение линейного программирования с помощью R». ссылку на учебник можно найти здесь

Я попытался скопировать точный код из главы 3.8 на стр. 75, но, похоже, он выдает другой результат

 Assignment01 <- function(c){
n <- dim(c)[1]
coef <- as.vector(t(c))
rhs <- rep(1,2*n)

Amatrix <- matrix(0, 2*n, n*n)

for(i in 1:n){
    for(j in 1:n){
        Amatrix[i, n*(i-1) j] <- 1
    }
}

for(i in 1:n){
    for(j in 1:n){
        Amatrix[n i, n*(j-1) i] <- 1
    }
}

signs <- rep("==", 2*n)
var_type <- rep("B", 2*n)
library(Rglpk)

solution <- Rglpk_solve_LP(obj=coef, mat=Amatrix, dir=signs, types=var_type, rhs=rhs, max=TRUE)
return(solution)

}

Assignment02 <- function(c){
n <- dim(c)[1]
coef <- c(rep(0, n*n),1)
rhs <- c(rep(1, 2*n), rep(0,n))
Amatrix <- matrix(0, 3*n, n*n   1)

for(i in 1:n){
    for(j in 1:n){
        Amatrix[i, n*(i-1) j] <- 1
    }
}

for(i in 1:n){
    for(j in 1:n){
        Amatrix[n i, n*(j-1) i] <- 1
    }
}

for(i in 1:n){
    for(j in 1:n){
        Amatrix[2*n 1, n*(j-1) i] <- c[j,i]
    }
}

for(i in 1:n){
    Amatrix[2*n 1, n*n   1] <- -1

}

signs <- c(rep("==", 2*n),rep(">=",n))

var_type <- c(rep("B", n*n), "C")

library(Rglpk)

solutionPL <- Rglpk_solve_LP(obj=coef, mat=Amatrix, dir=signs, types=var_type, rhs=rhs, max=TRUE)
return (solutionPL) 
}


set.seed(1)
c <- matrix(sample(10:100, 25),100,100)
solAss01 <- Assignment01(c)
m.01 <- matrix(solAss01$solution[1:25],5,5, byrow=TRUE)
solAss02 <- Assignment02(c)
m.02 <- matrix(solAss02$solution[1:25],5,5,byrow=TRUE)
print(m.01)
print(m.02)
  

и получил этот результат

введите описание изображения здесь

это должно быть введите описание изображения здесь

введите описание изображения здесь

Ответ №1:

Этот код не компилируется:

 for(j in 1:){
  

Я полагаю, что вы путаете x(i,j) с. c(i,j) x Значения представляют собой нули и единицы только по одному 1 в каждой строке и столбце.

Также обратите внимание, что у вас c(i,j) одинаковое значение для каждого j :

 > c[1:5,1:5]
     [,1] [,2] [,3] [,4] [,5]
[1,]   34   34   34   34   34
[2,]   43   43   43   43   43
[3,]   60   60   60   60   60
[4,]   89   89   89   89   89
[5,]   27   27   27   27   27
  

Комментарии:

1. Привет, извините за опечатку, я случайно сделал это при отправке здесь, в stackoverflow, это должно быть для (j в 1: n), в моем коде то же самое, и он по-прежнему показывает тот же результат, что и показано выше в моем сообщении. попытаюсь отредактировать его, чтобы у других не было ошибки компиляции,спасибо

2. Привет, спасибо за ответ, я действительно смущен x (i, j) частью кода, я все еще не могу заставить его работать. Спасибо

3. Попробуйте меньший 5 x 5 пример (вместо 100 x 100 ) с c(i,j) , как показано в таблицах 3.19 и 3.20. Жирные цифры должны указывать, где `x (i, j) = 1′.

4. Используйте c <- matrix(sample(10:100, 25),5,5) в своем скрипте для репликации результатов.

5. Я нашел другой способ обойти. большое спасибо за вашу помощь. Я действительно помог мне решить проблему, с которой я столкнулся