【发布时间】:2020-01-19 22:01:29
【问题描述】:
我正在尝试解决这个背包问题的例子:
一艘船必须用不同重量的容器包装 并且有不同的价值观。任务是找到最优的 容器(0-9)的组合以获得最大的价值,同时仍然 体重限制在320以内。
我无法弄清楚如何将容器与我目前拥有的代码进行这种最佳组合。我似乎无法获得任何结果来帮助我找到代码中的错误或帮助我了解缺少的内容。
weight = [50, 50, 60, 80, 100, 110, 120, 150, 150, 200]
value = [80, 80, 60, 50, 100, 90, 100, 170, 200, 240]
n = len(weight)
max_w = 320
def build_items(n):
res = []
for i in range(n):
items = (weight[i], value[i])
res.append(items)
return res
def powerset(items):
res = [[]]
for item in items:
newset = [r+[item] for r in res]
res.extend(newset)
return res
def kbf(items, max_weight):
knapsack = []
best_weight = 0
best_value = 0
for item_set in powerset(items):
set_weight = sum(e[0] for e in item_set)
set_value = sum(e[1] for e in item_set)
if set_value > best_value and set_weight <= max_w:
best_value = set_value
best_weight = set_weight
knapsack = item_set
return knapsack, best_weight, best_value
data = build_items(n)
print(data)
print(powerset(data))
print(kbf(data,max_w))
打印最后一个函数给了我一个非常奇怪的输出。
【问题讨论】:
-
“奇怪的输出”是什么意思?它有什么奇怪的?你期待什么?