2016-10-11 5 views
0

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

I пытался скопировать точный код из главы 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) 

и получил этот выход

enter image description here

, которые должны быть enter image description here

enter image description here

ответ

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 
+0

Привет извините за типографской ошибки, я случайно сделал это представление здесь на StackOverflow, это должно быть для (J в 1: N) , то же самое в моем коде и по-прежнему показывает тот же результат, что и выше, в моем посте будет пытаться отредактировать его, чтобы другие не имели ошибки компиляции, спасибо –

+0

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

+1

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

 Смежные вопросы

  • Нет связанных вопросов^_^