From 549ef7cd851a1a650d64c7794bc10eb7deab15ca Mon Sep 17 00:00:00 2001 From: andrzej Date: Mon, 11 May 2020 14:15:54 +0200 Subject: [PATCH] Poprawka --- Andrzej_Preibisz.md | 51 +++++++++++++++++++++++ package_location_classifier/classifier.py | 4 -- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/Andrzej_Preibisz.md b/Andrzej_Preibisz.md index f5eb88a..453998a 100644 --- a/Andrzej_Preibisz.md +++ b/Andrzej_Preibisz.md @@ -74,6 +74,15 @@ Przygotowanie zbioru uczącego i testowego dla drzewa: X_train = pd.get_dummies(products[feature_cols]) y_train = products.chance_of_survive ``` +Uczenie drzewa i ewaluacja przy pomocy zbioru testowego: +``` python + self.predictor = clf.fit(X_train, y_train) + + y_pred = self.predictor.predict(test_X) + +``` + + Graficzna reprezentacja drzewa wygenerowanego dla tego zbioru uczącego: ![Przykładowe drzewo](Drzewo.png) @@ -82,3 +91,45 @@ Wyniki ewaluacji zestawu testowego, znajdujące się w pliku Test_results.xlsx: Przewidywana wartość w zestawie testowym różni się od wartości faktycznej średnio o 0.87, jako że w raporcie wartości są pomnożone przez 10, daje to średnio 0.087 wartości różnicy w czasie działania drzewa. + + +##### Zastosowanie drzewa w części wspólnej projektu + +Po podniesieniu paczki przez agenta odpalana jest funkcja szukająca najbliższego pasującego regału. +Przy poszukiwaniu takiego regału stosowana jest funkcja heurystyczna o następującym kodzie: +```python + def rack_heuristics(self, start, goal, can_place): + heur_can_place = not can_place + diff_x = pow(goal.x - start.x, 2) + diff_y = pow(goal.y - start.y, 2) + place_cost = 100 * float(heur_can_place) + return round(sqrt(diff_x + diff_y), 3) + float(place_cost) +``` +Parametr can_place to wynik ewaluacji pola goal, przy pomocy drzewa: +```python + for rack in quarter_racks: + new_node = Node(rack.x_position, rack.y_position) + can_place = self.location_classifier.check_if_can_place(package, rack) + cost = self.rack_heuristics(start_node, new_node, can_place) +``` +self.location_classifier, to obiekt klasy PackageLocationClassifier. +Klasa ta zawiera metodę check_if_can_place() : +```python + def check_if_can_place(self, package, tile): + category = package.category + cat_treshold = PACKAGE_PLACE_TRESHOLD[category] + fields = [[ + tile.air_temperature, + tile.humidity, + category == "flammable", + category == "fragile", + category=="freezed" , + category == "keep_dry", + category == "normal" + ]] + + quality_of_place = round(self.predictor.predict(fields)[0]/10, 2) + if quality_of_place > cat_treshold: + return True + return False +``` \ No newline at end of file diff --git a/package_location_classifier/classifier.py b/package_location_classifier/classifier.py index 060425c..fa97a47 100644 --- a/package_location_classifier/classifier.py +++ b/package_location_classifier/classifier.py @@ -42,8 +42,6 @@ class PackageLocationClassifier(): clf = DecisionTreeRegressor(ccp_alpha=0.02, min_samples_leaf=5, max_depth=5) self.predictor = clf.fit(X_train, y_train) - - y_pred = self.predictor.predict(test_X) evaluation = pd.DataFrame({'category': testset.category, 'temperature': testset.temperature , 'humid': testset.humidity ,'Actual': test_y, 'Predicted': y_pred}) @@ -69,8 +67,6 @@ class PackageLocationClassifier(): ]] quality_of_place = round(self.predictor.predict(fields)[0]/10, 2) - # print("{} - dopasowanie {}".format(package,quality_of_place)) - # pdb.set_trace() if quality_of_place > cat_treshold: return True return False