diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..25247b4 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "python.analysis.extraPaths": [ + "./DecisionTree" + ] +} \ No newline at end of file diff --git a/DecisionTree/drzewo_decyzyjne.py b/DecisionTree/drzewo_decyzyjne.py deleted file mode 100644 index 82ded67..0000000 --- a/DecisionTree/drzewo_decyzyjne.py +++ /dev/null @@ -1,87 +0,0 @@ -import graphviz -import pandas as pd -from sklearn.tree import DecisionTreeClassifier -from sklearn.tree import export_graphviz - -# def make_tree(): -# plikZPrzecinkami = open("training_data.txt", 'w') - -# with open('DecisionTree/200permutations_table.txt', 'r') as plik: -# for linia in plik: -# liczby = linia.strip() -# wiersz = "" -# licznik = 0 -# for liczba in liczby: -# wiersz += liczba -# wiersz += ";" -# wiersz = wiersz[:-1] -# wiersz += '\n' -# plikZPrzecinkami.write(wiersz) - -# plikZPrzecinkami.close() - -# x = pd.read_csv('DecisionTree/training_data.txt', delimiter=';', -# names=['wielkosc', 'waga,', 'priorytet', 'ksztalt', 'kruchosc', 'dolna', 'gorna', 'g > d']) -# y = pd.read_csv('DecisionTree/decisions.txt', names=['polka']) -# # X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1) # 70% treningowe and 30% testowe - -# # Tworzenie instancji klasyfikatora ID3 -# clf = DecisionTreeClassifier(criterion='entropy') - -# # Trenowanie klasyfikatora -# clf.fit(x.values, y.values) -# # clf.fit(X_train, y_train) -# return clf - -plikZPrzecinkami = open("DecisionTree/training_data.txt", 'w') - -with open('DecisionTree/200permutations_table.txt', 'r') as plik: - for linia in plik: - liczby = linia.strip() - wiersz = "" - licznik = 0 - for liczba in liczby: - wiersz += liczba - wiersz += ";" - wiersz = wiersz[:-1] - wiersz += '\n' - plikZPrzecinkami.write(wiersz) - -plikZPrzecinkami.close() - -x = pd.read_csv('DecisionTree/training_data.txt', delimiter=';', - names=['wielkosc', 'waga,', 'priorytet', 'ksztalt', 'kruchosc', 'dolna', 'gorna', 'g > d']) -y = pd.read_csv('DecisionTree/decisions.txt', names=['polka']) -# X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1) # 70% treningowe and 30% testowe - -# Tworzenie instancji klasyfikatora ID3 -clf = DecisionTreeClassifier(criterion='entropy') - -# Trenowanie klasyfikatora -clf.fit(x.values, y.values) -# clf.fit(X_train, y_train) - - -# Predykcja na nowych danych -new_data = [[2, 2, 1, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]] -predictions = clf.predict(new_data) -# y_pred = clf.predict(X_test) - - -print(predictions) -# print("Accuracy:", clf.score(new_data, predictions)) -# print("Accuracy:", metrics.accuracy_score(y_test, y_pred)) - - -# Wygenerowanie pliku .dot reprezentującego drzewo -dot_data = export_graphviz(clf, out_file=None, feature_names=list(x.columns), class_names=['0', '1'], filled=True, - rounded=True) - -# Tworzenie obiektu graphviz z pliku .dot -graph = graphviz.Source(dot_data) - -# Wyświetlanie drzewa -graph.view() - -z = pd.concat([x, y], axis=1) -z.to_csv('dane.csv', index=False) diff --git a/__pycache__/ekran.cpython-311.pyc b/__pycache__/ekran.cpython-311.pyc index 70bdb4e..bd1b424 100644 Binary files a/__pycache__/ekran.cpython-311.pyc and b/__pycache__/ekran.cpython-311.pyc differ diff --git a/__pycache__/grid.cpython-311.pyc b/__pycache__/grid.cpython-311.pyc index 4416952..65f57df 100644 Binary files a/__pycache__/grid.cpython-311.pyc and b/__pycache__/grid.cpython-311.pyc differ diff --git a/__pycache__/packageList.cpython-311.pyc b/__pycache__/packageList.cpython-311.pyc index 5e540f6..0100db0 100644 Binary files a/__pycache__/packageList.cpython-311.pyc and b/__pycache__/packageList.cpython-311.pyc differ diff --git a/__pycache__/paczka.cpython-311.pyc b/__pycache__/paczka.cpython-311.pyc index 7807dfa..480caee 100644 Binary files a/__pycache__/paczka.cpython-311.pyc and b/__pycache__/paczka.cpython-311.pyc differ diff --git a/__pycache__/regal.cpython-311.pyc b/__pycache__/regal.cpython-311.pyc index c7d75cf..a892f15 100644 Binary files a/__pycache__/regal.cpython-311.pyc and b/__pycache__/regal.cpython-311.pyc differ diff --git a/__pycache__/wozek.cpython-311.pyc b/__pycache__/wozek.cpython-311.pyc index 21f255c..27447ca 100644 Binary files a/__pycache__/wozek.cpython-311.pyc and b/__pycache__/wozek.cpython-311.pyc differ diff --git a/__pycache__/wyszukiwanie.cpython-311.pyc b/__pycache__/wyszukiwanie.cpython-311.pyc index d864d90..59ec590 100644 Binary files a/__pycache__/wyszukiwanie.cpython-311.pyc and b/__pycache__/wyszukiwanie.cpython-311.pyc differ diff --git a/drzewo_decyzyjne.py b/drzewo_decyzyjne.py new file mode 100644 index 0000000..f8efe20 --- /dev/null +++ b/drzewo_decyzyjne.py @@ -0,0 +1,58 @@ +import graphviz +import pandas as pd +from sklearn.tree import DecisionTreeClassifier +from sklearn.tree import export_graphviz + +def make_tree(): + plikZPrzecinkami = open("training_data.txt", 'w') + + with open('DecisionTree/200permutations_table.txt', 'r') as plik: + for linia in plik: + liczby = linia.strip() + wiersz = "" + licznik = 0 + for liczba in liczby: + wiersz += liczba + wiersz += ";" + wiersz = wiersz[:-1] + wiersz += '\n' + plikZPrzecinkami.write(wiersz) + + plikZPrzecinkami.close() + + x = pd.read_csv('DecisionTree/training_data.txt', delimiter=';', + names=['wielkosc', 'waga,', 'priorytet', 'ksztalt', 'kruchosc', 'dolna', 'gorna', 'g > d']) + y = pd.read_csv('DecisionTree/decisions.txt', names=['polka']) + # X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1) # 70% treningowe and 30% testowe + + # Tworzenie instancji klasyfikatora ID3 + clf = DecisionTreeClassifier(criterion='entropy') + + # Trenowanie klasyfikatora + clf.fit(x.values, y.values) + # clf.fit(X_train, y_train) + return clf + +# # Predykcja na nowych danych +# new_data = [[2, 2, 1, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]] +# predictions = clf.predict(new_data) +# # y_pred = clf.predict(X_test) + + +# print(predictions) +# # print("Accuracy:", clf.score(new_data, predictions)) +# # print("Accuracy:", metrics.accuracy_score(y_test, y_pred)) + + +# Wygenerowanie pliku .dot reprezentującego drzewo +# dot_data = export_graphviz(clf, out_file=None, feature_names=list(x.columns), class_names=['0', '1'], filled=True, +# rounded=True) + +# # Tworzenie obiektu graphviz z pliku .dot +# graph = graphviz.Source(dot_data) + +# # Wyświetlanie drzewa +# graph.view() + +# z = pd.concat([x, y], axis=1) +# z.to_csv('dane.csv', index=False) diff --git a/ekran.py b/ekran.py index a75ffa4..c80a948 100644 --- a/ekran.py +++ b/ekran.py @@ -1,10 +1,7 @@ import pygame - from plansza import x1, y1, x2, y2, x3, y3, x4, y4, a_pix, b_pix from regal import Regal, obliczPixeleNaPodstawieKratek -# import wozek from packageList import * -# from paczka import Paczka EKRAN_SZEROKOSC = 770 EKRAN_WYSOKOSC = 770 @@ -15,9 +12,6 @@ pygame.display.set_caption("Inteligentny wozek") icon = pygame.image.load('images/icon.png') pygame.display.set_icon(icon) -# lista_paczek = packageList.zainicjuj_liste_paczek(a_pix, b_pix) - -#lista_paczek = listOfPackages() lista_paczek = [] lista_paczek_na_regalach = [] @@ -52,11 +46,6 @@ def zwroc_regaly_kategoria(kategoria): lista_reg.append(reg) return lista_reg -# def zwroc_regaly_wspolrzedne(x_reg, y_reg): -# for regal in lista_regalow: -# if regal.wiersz == obliczPixeleNaPodstawieKratek(x_reg) and regal.kolumna == obliczPixeleNaPodstawieKratek(y_reg): -# return regal - def narysuj_siatke(): blockSize = 70 # Set the size of the grid block WHITE = (200, 200, 200) @@ -94,13 +83,16 @@ def sprawdz_ktora_kolumna(y): def narysuj_paczki(wozek): - #if wozek.ln == 0: - #for paczka in lista_paczek.list: - #if len(lista_paczek_na_regalach) == 0: for paczka in lista_paczek: paczka.narysuj(paczka.x, paczka.y, screen) def narysuj_paczke_na_regale(): for paczka in lista_paczek_na_regalach: if paczka.is_in_move is False: - paczka.narysuj(paczka.x, paczka.y, screen) \ No newline at end of file + paczka.narysuj(paczka.x, paczka.y, screen) + +def dodaj_paczki_na_rampe(p1, p2): + lista_paczek.append(p1) + lista_paczek.append(p2) + p1.update_position(a_pix, b_pix) + p2.update_position(a_pix, b_pix) diff --git a/main.py b/main.py index 7c4ee17..868f509 100644 --- a/main.py +++ b/main.py @@ -7,6 +7,7 @@ import ekran from grid import GridCellType, SearchGrid from sklearn.tree import DecisionTreeClassifier import pandas as pd +import drzewo_decyzyjne from plansza import a_pix, b_pix pygame.init() @@ -14,15 +15,11 @@ pygame.init() def main(): wozek = Wozek() - p1 = Paczka('duzy', 12, 'narzedzia', False, True, False, any, any, any, any, any) p2 = Paczka('maly', 1, 'ogród', False, True, False, any, any, any, any, any) - ekran.lista_paczek.append(p1) - ekran.lista_paczek.append(p2) - p1.update_position(a_pix, b_pix) - p2.update_position(a_pix, b_pix) - + ekran.dodaj_paczki_na_rampe(p1, p2) grid_points = SearchGrid() + drzewo = drzewo_decyzyjne.make_tree() while True: for event in pygame.event.get(): @@ -52,34 +49,14 @@ def main(): array, reg = przenoszona_paczka.tablica_do_drzewa(przenoszona_paczka.kategoria) - plikZPrzecinkami = open("DecisionTree/training_data.txt", 'w') + predictions = drzewo.predict([array]) - with open('DecisionTree/200permutations_table.txt', 'r') as plik: - for linia in plik: - liczby = linia.strip() - wiersz = "" - licznik = 0 - for liczba in liczby: - wiersz += liczba - wiersz += ";" - wiersz = wiersz[:-1] - wiersz += '\n' - plikZPrzecinkami.write(wiersz) - - plikZPrzecinkami.close() - x = pd.read_csv('DecisionTree/training_data.txt', delimiter=';', - names=['wielkosc', 'waga,', 'priorytet', 'ksztalt', 'kruchosc', 'dolna', 'gorna', 'g > d']) - y = pd.read_csv('DecisionTree/decisions.txt', names=['polka']) - clf = DecisionTreeClassifier(criterion='entropy') - clf.fit(x.values, y.values) - - predictions = clf.predict([array]) if predictions == 0: print('odklada na dolna polke!') else: print('odklada na gorna polke!') - docelowy_stan = wyszukiwanie.Stan(reg.numerWiersza * 70, reg.numerKolumny * 70, 1) # x1 i y1 bo to są regału kategorii ogród + docelowy_stan = wyszukiwanie.Stan(reg.numerWiersza * 70, reg.numerKolumny * 70, 1) wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) sciezka = wyszukiwanie.znajdz_sciezke(wezel) wozek.przemiesc_wozek_po_sciezce(sciezka) diff --git a/paczka.py b/paczka.py index 71ea4a6..aea865f 100644 --- a/paczka.py +++ b/paczka.py @@ -89,36 +89,36 @@ class Paczka(pygame.sprite.Sprite): # piorytet if self.priorytet is True: - tablica.append(0) - else: tablica.append(1) + tablica.append(1) + else: tablica.append(0) # kształt if self.ksztalt is True: - tablica.append(0) - else: tablica.append(1) + tablica.append(1) + else: tablica.append(0) # kruchość if self.kruchosc is True: - tablica.append(0) - else: tablica.append(1) + tablica.append(1) + else: tablica.append(0) reg = ekran.zwroc_regaly_kategoria(kategoria) # czy dolna wolna if reg[0].is_dolna_free() is True: - tablica.append(0) - else: tablica.append(1) + else: + tablica.append(0) #czy górna wolna if reg[0].is_dolna_free() is True: - tablica.append(0) - else: tablica.append(1) + else: + tablica.append(0) # czy na górnej więcej miejsca - if reg[0].is_dolna_free() is True: - tablica.append(0) - else: + if reg[0].czy_na_gornej_wiecej_miejsca() is True: tablica.append(1) + else: + tablica.append(0) return tablica, reg[0] \ No newline at end of file diff --git a/training_data.txt b/training_data.txt index e69de29..06a4ff8 100644 --- a/training_data.txt +++ b/training_data.txt @@ -0,0 +1,200 @@ +1;0;0;1;0;0;1;0 +0;0;1;0;1;1;0;1 +2;0;1;1;0;0;0;1 +2;2;1;0;1;1;1;0 +1;0;0;1;0;0;0;1 +2;1;0;0;1;1;0;0 +1;0;0;0;1;0;0;1 +1;1;0;1;0;0;0;1 +0;0;1;0;1;1;1;0 +0;2;0;0;0;1;1;0 +0;0;1;0;0;1;0;1 +0;0;0;0;0;1;1;0 +0;2;1;0;1;1;0;0 +2;0;0;0;1;0;0;0 +2;1;0;1;0;1;1;1 +0;1;1;0;1;1;1;0 +0;2;0;1;1;1;0;1 +1;2;1;0;1;1;0;0 +0;0;1;1;1;1;0;1 +0;0;0;1;1;0;0;1 +1;1;1;1;1;0;1;0 +1;2;1;0;0;1;1;1 +2;2;1;1;0;1;1;1 +1;2;1;0;1;1;0;1 +0;1;0;0;0;1;0;1 +1;1;0;0;0;1;0;1 +0;1;0;0;0;1;1;1 +2;1;0;1;0;1;0;1 +0;1;1;0;1;1;0;0 +2;1;0;1;0;1;1;0 +1;2;1;0;0;0;1;1 +1;2;0;1;0;1;1;1 +0;2;0;1;0;1;0;1 +2;1;1;0;1;1;1;1 +0;2;0;1;0;0;0;1 +0;1;1;0;0;1;1;0 +2;2;1;0;0;0;1;1 +1;0;0;0;0;0;1;0 +0;0;1;1;0;1;0;0 +2;2;0;1;1;1;0;0 +1;2;1;1;0;0;0;1 +1;2;0;1;0;0;1;1 +0;1;0;1;1;1;1;0 +0;1;0;0;1;1;0;0 +0;1;0;1;1;0;0;0 +1;1;1;0;1;1;0;1 +1;1;1;1;0;1;1;0 +2;1;1;1;0;1;1;0 +2;2;0;0;1;1;0;0 +1;0;0;1;0;1;0;1 +2;1;1;1;1;0;1;0 +0;0;0;0;1;1;0;0 +2;1;1;1;0;1;0;1 +1;2;1;1;1;0;1;1 +0;2;0;0;1;1;1;1 +2;1;0;1;1;0;0;0 +0;2;1;1;1;0;1;1 +1;2;0;1;1;1;1;0 +0;2;0;0;0;1;0;1 +1;2;0;0;0;1;0;0 +2;0;0;1;0;1;1;1 +2;1;1;0;0;0;1;1 +0;1;1;1;0;1;0;0 +2;1;0;1;1;1;0;0 +0;2;0;1;0;0;0;0 +2;1;0;0;1;0;0;1 +1;1;0;0;1;1;0;0 +2;0;0;1;0;0;1;1 +2;0;1;1;1;0;1;1 +2;2;0;1;1;0;0;0 +0;1;0;1;1;1;0;1 +1;0;1;1;1;0;0;0 +2;0;0;1;1;1;1;1 +1;0;0;0;0;0;0;1 +2;1;1;0;0;0;0;1 +0;0;0;0;1;1;0;1 +0;1;0;1;0;0;0;1 +2;2;0;1;0;0;0;0 +0;2;1;1;1;1;0;1 +2;2;1;0;0;1;1;0 +1;2;0;0;1;1;1;0 +0;1;1;1;0;0;0;1 +1;1;1;0;1;0;0;0 +2;0;1;1;0;0;1;1 +2;0;1;0;1;0;1;0 +2;2;0;0;0;1;1;0 +1;1;0;1;1;0;1;1 +2;0;0;0;0;0;1;1 +1;2;0;0;1;1;0;1 +1;2;1;1;0;0;0;0 +0;0;1;1;1;1;1;0 +0;2;1;1;0;1;0;0 +2;1;1;0;0;0;1;0 +1;0;0;1;1;0;0;0 +2;2;0;1;1;1;0;1 +2;0;0;1;1;1;0;0 +0;2;1;0;0;0;0;0 +1;2;1;1;1;0;0;1 +0;0;0;0;0;1;1;1 +2;2;1;1;1;0;1;1 +0;1;0;0;1;0;1;0 +2;1;1;0;1;1;0;0 +0;1;1;1;1;1;1;1 +1;2;1;1;1;0;1;0 +2;0;1;1;1;1;1;0 +1;0;1;1;0;0;1;0 +0;2;0;0;1;0;0;1 +2;2;0;0;0;1;0;0 +0;2;0;0;1;1;0;0 +0;1;0;0;0;0;1;1 +1;0;0;0;0;1;0;1 +2;1;0;0;0;0;1;0 +0;1;1;0;0;1;0;0 +1;0;1;0;1;0;1;0 +2;0;0;0;1;1;0;0 +0;0;0;0;0;0;0;0 +0;0;1;0;1;0;0;0 +1;0;1;0;0;0;0;0 +0;2;1;0;0;0;0;1 +2;0;0;1;1;1;0;1 +0;2;0;1;1;1;1;0 +0;2;1;1;1;1;1;1 +1;2;0;1;0;1;1;0 +0;2;1;0;0;1;0;0 +2;0;1;1;1;1;1;1 +0;0;0;1;1;1;1;1 +1;2;0;1;1;0;0;0 +1;2;0;1;1;0;0;1 +2;2;0;1;0;0;1;0 +2;2;0;0;0;0;1;0 +0;0;0;1;0;0;1;0 +1;0;1;0;1;0;0;0 +0;2;0;0;0;0;0;0 +2;0;1;0;1;1;1;1 +0;2;1;0;0;0;1;1 +0;2;1;0;1;1;1;1 +2;2;1;0;1;0;1;0 +1;1;1;1;1;1;1;1 +0;1;1;0;1;0;0;0 +2;1;1;0;0;1;1;1 +0;0;1;0;1;1;1;1 +0;1;1;0;1;0;1;0 +2;0;0;1;0;0;1;0 +1;1;0;1;1;1;1;0 +2;0;0;1;1;1;1;0 +0;0;1;0;0;1;1;0 +1;0;1;0;1;1;1;1 +0;1;0;0;0;0;0;1 +0;2;0;1;1;0;0;1 +2;1;1;0;1;0;1;1 +1;1;1;1;1;0;1;1 +1;0;1;1;0;0;1;1 +1;0;0;1;1;0;0;1 +2;1;1;1;0;0;1;0 +1;0;0;0;0;0;0;0 +0;0;0;1;1;1;1;0 +1;0;1;1;0;0;0;1 +2;1;1;1;1;0;1;1 +1;2;0;1;0;1;0;1 +1;1;0;0;0;1;1;0 +2;2;1;0;1;1;0;1 +0;0;0;0;0;0;1;0 +0;2;0;0;0;1;1;1 +2;1;0;0;0;0;1;1 +0;0;0;1;1;1;0;0 +1;0;1;0;0;1;1;0 +2;0;0;0;1;1;1;1 +1;2;1;0;0;0;0;1 +2;2;0;0;0;1;0;1 +0;1;1;0;0;0;1;0 +0;2;0;0;1;0;1;0 +1;1;0;0;1;1;1;1 +0;0;0;1;0;0;1;1 +0;1;1;0;0;1;1;1 +2;2;0;1;1;0;1;0 +1;0;1;0;1;0;1;1 +1;1;0;1;0;0;1;1 +2;0;1;1;0;0;1;0 +2;0;1;0;0;0;1;0 +1;1;1;1;0;1;1;1 +2;1;1;0;1;0;0;0 +0;2;0;1;1;0;0;0 +1;2;1;1;0;1;0;0 +2;1;1;1;1;1;0;1 +0;2;0;1;0;1;1;1 +0;2;1;0;1;0;0;1 +0;1;1;0;0;0;1;1 +1;0;0;1;1;0;1;1 +2;2;1;1;0;0;0;0 +0;1;1;0;0;0;0;0 +2;0;1;1;0;1;0;0 +0;1;1;0;0;0;0;1 +0;0;1;1;1;0;1;0 +0;2;0;0;0;0;1;0 +2;0;0;1;0;1;1;0 +0;0;1;0;1;0;1;1 +2;2;0;0;1;0;1;1 +2;2;0;1;0;0;0;1 +2;2;0;1;0;1;0;1 +1;2;1;0;0;1;0;1