2017-10-24 8 views
-1

データフレームからナップザックに入れる複数のアイテムを選択するこのコードはあります。私はそれだけで一度だけデータフレームから項目を選択することを望んでいた: -ダイナミックプログラミングナップザックのみを選択するR

knapsack_volume<-function(Data, W, Volume, full_K){ 

Data = Data 

# Data must have the colums with names: item, value, weight and volume. 
K<-list() # hightest values 
K_item<-list() # itens that reach the hightest value 
K<-rep(0,W+1) # The position '0' 

K_item<-rep('',W+1) # The position '0' 


# while(length(Data$item) != 1){ 
    for(w in 1:W){ 

    temp_w<-0 
    temp_item<-'' 
    temp_value<-0 

    for(i in 1:dim(Data)[1]){ # each row 

     wi<-Data$weight[i] # item i 
     vi<- Data$value[i] 
     item<-Data$item[i] 
     volume_i<-Data$volume[i] 



     if(wi<=w & volume_i <= Volume){ 

     back<- full_K[[Volume-volume_i+1]][w-wi+1] 
     temp_wi<-vi + back 

     if(temp_w < temp_wi){ 

      temp_value<-temp_wi 
      temp_w<-temp_wi 
      temp_item <- item 
     } 
     } 

     # Data = Data[-i, ] 

    } 
    K[[w+1]]<-temp_value 
    K_item[[w+1]]<-temp_item 
    } 

return(list(K=K,Item=K_item)) 
} 

データフレームが見えるように: -

項目値重量体積

B 80 8 12

c204 6

D 100 10 14

E 65 8 8

F 60 10 5

G 70 5 12

H 45 5 7

I 60 6 6

J 60 4 8

データフレームは、次の方法で再現できます。 -

Data = data.frame(item = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"), 
value = c(40, 80, 20, 100, 65, 60, 70, 45, 60, 60), weight = c(4, 8, 4, 10, 8, 
10, 5, 5, 6, 4), volume = c(8, 12, 6, 14, 8, 5, 12, 7, 6, 8)) 

おかげ

答えて

1

どのようにあなたのナップザックに入れたら、データフレームから項目を削除することは?しかし、ナップザックがユニークなアイテムでいっぱいになるという保証が必要です。

+0

これが正しいです。だから帽子のための何かの誓い? –