From 4125e8b09f57e727884a91abe818a993333c78e7 Mon Sep 17 00:00:00 2001 From: HelQ Date: Tue, 7 Jun 2022 17:48:46 +0200 Subject: [PATCH] Visualisation of making decisions. --- images/refused_rubbish.png | Bin 0 -> 3821 bytes main.py | 57 +++++++++++++++++++++++-------------- rubbish.py | 3 ++ tree.py | 3 +- 4 files changed, 41 insertions(+), 22 deletions(-) create mode 100644 images/refused_rubbish.png diff --git a/images/refused_rubbish.png b/images/refused_rubbish.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a0b44d54b17da6756feaf28fc45d0b1daee930 GIT binary patch literal 3821 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 2050ce8..eef48ab 100644 --- a/main.py +++ b/main.py @@ -11,16 +11,25 @@ from surface import * RESOLUTION = 900 SIZE = 60 +pygame.init() +screen = pygame.display.set_mode([RESOLUTION, RESOLUTION]) + +truck = Truck(screen) +surface_list = [] +rubbish_list = [] +refused_rubbish_list = [] + +# x and y are swapped on display in pygame # matrix for display matrix = [[0, 1, 1, 2, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 3, 0, 2, 1, 5, 3, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 3, 0, 2, 1, 5, 3, 0, 5, 0, 0, 0, 0, 0], [0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], - [3, 3, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [3, 3, 3, 0, 0, 0, 2, 5, 0, 5, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], @@ -28,13 +37,6 @@ matrix = [[0, 1, 1, 2, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ] -pygame.init() -screen = pygame.display.set_mode([RESOLUTION, RESOLUTION]) - -truck = Truck(screen) -surface_list = [] -rubbish_list = [] -# x and y are swapped on display in pygame for i in range(15): for j in range(15): if matrix[i][j] == 0: @@ -50,23 +52,19 @@ for i in range(15): rubbish_list.append(Rubbish(screen, j * 60, i * 60)) path = [] -run = 1 while True: pygame.time.delay(500) + # drawing on screen for i in surface_list: i.draw_surface() for i in rubbish_list: i.draw_rubbish() + for i in refused_rubbish_list: + i.draw_rubbish() truck.draw_truck() - if run == 1: - # func(rubbish_list[0]) - data = rubbish_list[0].data_for_decision_tree() - test = trash_selection(evaluate_values(data)) - print(test) - run = 0 - + # finding a path to rubbish if rubbish_list and not path: start = (truck.y / 60, truck.x / 60) direction = truck.direction @@ -75,15 +73,32 @@ while True: # path = bfs(surface_list, endpoint).tree_search(deque(), start, direction) path = a_star(surface_list, endpoint).tree_search(PriorityQueue(), start, direction) + # do an action if path: action = path.pop(0) if action == 'M': truck.move() else: truck.change_direction(action) - if not path: - if rubbish_list: - print(rubbish_list.pop(0).x) + + # the decision that takes what to do with the garbage + if not path and rubbish_list: + data = rubbish_list[0].data_for_decision_tree() + print(f'----------\n' + f'Characteristics of the garbage we met:\n' + f'Weight:{data[0]}\nDensity:{data[1]}\n' + f'Fragility:{data[2]}\nMaterial:{data[3]}\n' + f'Size:{data[4]}\nDegradability:{data[4]}\n' + f'Renewability:{data[5]}\n' + f'----------') + decision = trash_selection(evaluate_values(data)) + if decision == [0]: + print('We refused this rubbish because of bad characteristics') + rubbish_list[0].rubbish_refused() + refused_rubbish_list.append(rubbish_list[0]) + else: + print('We take this rubbish because of good characteristics') + rubbish_list.pop(0) pygame.display.flip() diff --git a/rubbish.py b/rubbish.py index aff1150..998b712 100644 --- a/rubbish.py +++ b/rubbish.py @@ -27,6 +27,9 @@ class Rubbish: def data_for_decision_tree(self): return [self.weight, self.density, self.fragility, self.material, self.size, self.degradability, self.renewability] + def rubbish_refused(self): + self.image = pygame.image.load('images/refused_rubbish.png') + class PaperWaste(Rubbish): diff --git a/tree.py b/tree.py index dd0e063..3686ade 100644 --- a/tree.py +++ b/tree.py @@ -6,6 +6,7 @@ from sklearn.tree import DecisionTreeClassifier def evaluate_values(values): + data = [] if values[0] == 10: data.append(10) @@ -148,4 +149,4 @@ def trash_selection(prefer): clf = clf.fit(x_train, y_train) - return clf.predict([prefer]) \ No newline at end of file + return clf.predict([prefer])