Я пытаюсь решить этот пример проблемы с рюкзаком:
Корабль должен быть упакован в контейнеры, которые имеют разный вес и разные значения. Задача состоит в том, чтобы найти оптимальную комбинацию контейнеров (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))
Печать последней функции дает мне действительно странный вывод.