我有这个代码,它选择多个项目放在数据框的背包中。我希望它只从数据框中选择一个项目: -
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))
}
DataFrame看起来像: -
项目值重量
A 40 4 8
B 80 8 12
C 20 4 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))
由于
答案 0 :(得分:1)
将数据放入背包后,如何从数据框中删除该项目?但是,您需要保证您的背包可以完全填充独特的物品。