Skip to content
Snippets Groups Projects
Commit 9a1dfb4c authored by tobiglaser's avatar tobiglaser
Browse files

dynamic working

parent a6ad45ba
No related branches found
No related tags found
No related merge requests found
import numpy as np
#config:
solve_brute_force = True
solve_dynamic = False
solve_brute_force = False
solve_dynamic = True
# item:
# name weight value
......@@ -10,17 +10,64 @@ weight = 1
value = 2
def dynamic(items: list, capacity: int) -> list:
print("Dynamic:")
#Array anlegen
num_items = len(items)
array = np.zeros(shape=(num_items+1, capacity), dtype=int)
array = np.zeros(shape=(num_items+1, capacity+1), dtype=int)
#erstes item
for i in range(items[0][weight], capacity+1):
array[1][i] = items[0][value]
# für jedes weitere item
for row, item in enumerate(items, start=1):
help_row = np.array[num_items]
for j, column in range(item[weight], capacity+1):
if item[1] >= j:
prev_weight = array[row-1]
if prev_weight + item[weight] <= column:
help_row[column] = prev_weight + item[weight]
pass #!
#erstes item wurde schon hinzugefügt
if row == 1:
continue
#erstelle eine Hilfszeile
help_row = array[row-1].copy()
#für jede Spalte
for index in range(len(help_row)):
#füge den item wert hinzu
help_row[index] += item[value]
#vergleiche die hilfszeile (verschoben um weight) mit der vorherigen Zeile
#und trage den besten wert weiter
for column in range(len(help_row)):
if column < item[weight]:
array[row][column] = array[row-1][column]
if column >= item[weight]:
array[row][column] = max(help_row[column-item[weight]], array[row-1][column])
print(array)
#backtracking
loaded_items = []
row = num_items
column = capacity
best_value = array[row, column]
print("best value", best_value)
while(column > 0):
while(array[row-1, column] == best_value):
row -= 1
if (row <= 0):
break
item = items[row-1]
loaded_items.append(item)
row -= 1
column -= item[weight]
best_value -= item[value]
#ausgabe
loaded_items.reverse()
end_weight = 0
end_value = 0
for item in loaded_items:
print(item[0])
end_weight += item[weight]
end_value += item[value]
print('Gewicht: ', end_weight)
print('Wert: ', end_value)
def traverse(items: list, max_weight: int, bits: list, level: int, depth: int, best_value, best_bits: list) -> list:
......@@ -57,7 +104,7 @@ def traverse(items: list, max_weight: int, bits: list, level: int, depth: int, b
bits[level] = 0
# traversiere rechts
#bits[level] = 0
#bits[level] = 0
traverse(items=items,
max_weight=max_weight,
bits=bits,
......@@ -67,6 +114,7 @@ def traverse(items: list, max_weight: int, bits: list, level: int, depth: int, b
best_bits=best_bits)
def brute(items: list, capacity: int) -> list:
print("Brute Force:")
mybits = []
best_bits = []
for i in range(len(items)):
......@@ -85,12 +133,12 @@ def brute(items: list, capacity: int) -> list:
best_bits=best_bits)
print(best_bits)
gewicht = 0
weight = 0
for i, item in enumerate(items):
if best_bits[0][i]:
gewicht += item[1]
weight += item[1]
print(item[0])
print('Gewicht: ', gewicht)
print('Gewicht: ', weight)
print('Wert: ', best_value[0])
def parse_data_file(path: str) -> list:
......@@ -125,5 +173,5 @@ if __name__ == "__main__":
if solve_dynamic:
items = get_items("Blatt2/knapsack01.data")
dynamic(items, 10000)
\ No newline at end of file
#items = get_items()
#dynamic(items, 500)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment