#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. Я нашел другой способ обойти. большое спасибо за вашу помощь. Я действительно помог мне решить проблему, с которой я столкнулся