Рюкзак динамический в R - PullRequest
       41

Рюкзак динамический в R

0 голосов
/ 12 октября 2018

Я пытаюсь реализовать код sudo из википедии, чтобы решить проблему ранца, но мой код не работает.Моя функция принимает в качестве входных данных фрейм данных X с 2 столбцами, первым были веса, а вторыми значения

 weights value
    10   110
    20   150
    15   180
    30   170
    18   130

knapsnack_dyn<-function(X,W){
  w<-c(0,X[,1])
  v<-c(0,X[,2])
  n<-nrow(X)
  m<- matrix(0,nrow=n+1,ncol=W+1)
  keep<-m
  res<-c()
  for (i in 1:n+1){
    for (j in 0:W+1){
      if (w[i]>j ){
        m[i,j]<-m[i-1,j]
        keep[i,j]<-0
      }else{
        m[i,j]<-max(m[i-1, j], m[i-1, j-w[i]] + v[i])
        keep[i,j]<-1
      }
    } 
  }
  K=W+1
  for (i in n+1:1){
    if(keep[i,K]==1){
      res[i]<-i
      K=K-w[i]
    }
  }
return(c(res,m[n+1,W+1]))
}
...