Optymalizacja/main.py

45 lines
968 B
Python
Raw Normal View History

2024-04-01 19:33:42 +02:00
from plecak import *
2024-04-04 00:33:42 +02:00
l = 10
2024-04-01 19:33:42 +02:00
dostepne = [Item() for _ in range(l)]
for x in dostepne:
print(x.waga, x.wartosc)
2024-04-04 00:33:42 +02:00
cap = 25
2024-04-01 19:33:42 +02:00
def knapsack(dostepne, cap):
2024-04-04 00:33:42 +02:00
def rekurencja(i, waga, val, items, alfa):
nonlocal max_val, plecak
2024-04-01 19:33:42 +02:00
2024-04-04 00:33:42 +02:00
if i >= len(dostepne) or waga == cap:
2024-04-01 19:33:42 +02:00
if val > max_val:
max_val = val
2024-04-04 00:33:42 +02:00
plecak = items
2024-04-01 19:33:42 +02:00
return
if val >= alfa:
2024-04-04 00:33:42 +02:00
plecak = items
2024-04-01 19:33:42 +02:00
return
2024-04-04 00:33:42 +02:00
rekurencja(i+1, waga, val, items, alfa)
2024-04-01 19:33:42 +02:00
2024-04-04 00:33:42 +02:00
if waga + dostepne[i].waga <= cap:
temp = items[:]
temp.append(dostepne[i])
rekurencja(i+1, waga + dostepne[i].waga, val + dostepne[i].wartosc, temp, alfa)
2024-04-01 19:33:42 +02:00
max_val = float("-inf")
2024-04-04 00:33:42 +02:00
plecak = []
rekurencja(0, 0, 0, [], 60)
return max_val, plecak
2024-04-01 19:33:42 +02:00
2024-04-04 00:33:42 +02:00
best, final = knapsack(dostepne, cap)
2024-04-01 19:33:42 +02:00
2024-04-04 00:33:42 +02:00
print("----------\n" + f'wartość plecaka: {best}')
for item in final:
print(item.waga, item.wartosc)