diff --git a/__pycache__/ekran.cpython-311.pyc b/__pycache__/ekran.cpython-311.pyc index bcff851..fb3378d 100644 Binary files a/__pycache__/ekran.cpython-311.pyc and b/__pycache__/ekran.cpython-311.pyc differ diff --git a/__pycache__/etykieta.cpython-311.pyc b/__pycache__/etykieta.cpython-311.pyc index 3b5ffaa..0f1f324 100644 Binary files a/__pycache__/etykieta.cpython-311.pyc and b/__pycache__/etykieta.cpython-311.pyc differ diff --git a/__pycache__/grid.cpython-311.pyc b/__pycache__/grid.cpython-311.pyc index 2c13014..4416952 100644 Binary files a/__pycache__/grid.cpython-311.pyc and b/__pycache__/grid.cpython-311.pyc differ diff --git a/__pycache__/main.cpython-311.pyc b/__pycache__/main.cpython-311.pyc index fc5784c..e376a93 100644 Binary files a/__pycache__/main.cpython-311.pyc and b/__pycache__/main.cpython-311.pyc differ diff --git a/__pycache__/packageList.cpython-311.pyc b/__pycache__/packageList.cpython-311.pyc index 6e569da..5e540f6 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 e68be21..c3f6e90 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 888de42..37de8cc 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 76c871d..578d94e 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 f87bcd4..d864d90 100644 Binary files a/__pycache__/wyszukiwanie.cpython-311.pyc and b/__pycache__/wyszukiwanie.cpython-311.pyc differ diff --git a/ekran.py b/ekran.py index 85668d3..ca73794 100644 --- a/ekran.py +++ b/ekran.py @@ -1,11 +1,10 @@ import pygame from plansza import x1, y1, x2, y2, x3, y3, x4, y4, a_pix, b_pix -import packageList -import regal -import wozek +from regal import Regal, obliczPixeleNaPodstawieKratek +# import wozek from packageList import * -from paczka import Paczka +# from paczka import Paczka EKRAN_SZEROKOSC = 770 EKRAN_WYSOKOSC = 770 @@ -16,28 +15,45 @@ 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 = packageList.zainicjuj_liste_paczek(a_pix, b_pix) +lista_paczek = listOfPackages() + def narysuj_regaly(): - regal.Regal(1, 1, x1, y1) - regal.Regal(2, 1, x1, y1+1) - regal.Regal(3, 1, x1+1, y1) - regal.Regal(4, 1, x1+1, y1+1) + global lista_regalow + r1 = Regal('ogród', x1, y1) + r2 = Regal('ogród', x1, y1+1) + r3 = Regal('ogród', x1+1, y1) + r4 = Regal('ogród', x1+1, y1+1) - regal.Regal(5, 1, x2, y2) - regal.Regal(6, 1, x2, y2+1) - regal.Regal(7, 1, x2+1, y2) - regal.Regal(8, 1, x2+1, y2+1) + r5 = Regal('narzedzia', x2, y2) + r6 = Regal('narzedzia', x2, y2+1) + r7 = Regal('narzedzia', x2+1, y2) + r8 = Regal('narzedzia', x2+1, y2+1) - regal.Regal(9, 1, x3, y3) - regal.Regal(10, 1, x3, y3+1) - regal.Regal(11, 1, x3+1, y3) - regal.Regal(12, 1, x3+1, y3+1) + r9 = Regal('kuchnia', x3, y3) + r10 = Regal('kuchnia', x3, y3+1) + r11 = Regal('kuchnia', x3+1, y3) + r12 = Regal('kuchnia', x3+1, y3+1) - regal.Regal(13, 1, x4, y4) - regal.Regal(14, 1, x4, y4+1) - regal.Regal(15, 1, x4+1, y4) - regal.Regal(16, 1, x4+1, y4+1) + r13 = Regal('motoryzacja', x4, y4) + r14 = Regal('motoryzacja', x4, y4+1) + r15 = Regal('motoryzacja', x4+1, y4) + r16 = Regal('motoryzacja', x4+1, y4+1) + + lista_regalow = [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16] + +def zwroc_regaly_kategoria(kategoria): + lista_reg = [] + for reg in lista_regalow: + if reg.nazwaRegalu == 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(): diff --git a/grid.py b/grid.py index 1227593..3909d4d 100644 --- a/grid.py +++ b/grid.py @@ -7,10 +7,17 @@ class GridCellType(Enum): FREE = 0 RACK = 1 PLACE = 2 - # dodać oznaczenie na miejsce dla paczek + +# class RackCellType(Enum): +# OGROD = 0 +# NARZEDZIA = 1 +# KUCHNIA = 2 +# MOTORYZACJA = 3 + class SearchGrid: grid: Dict[Tuple[int, int], GridCellType] = {} + # rack_grid : Dict[Tuple[int, int], GridCellType] = {} def __init__(self) -> None: self._init_grid() @@ -19,8 +26,10 @@ class SearchGrid: for i in range (0,14): for j in range(0,14): self.grid[(i, j)] = GridCellType.FREE - for r, c in [(x1, y1), (x1, y1+1), (x1+1, y1), (x1+1, y1+1), (x2, y2), (x2+1, y2), (x2, y2+1), (x2+1, y2+1), + for c, d in [(x1, y1), (x1, y1+1), (x1+1, y1), (x1+1, y1+1), (x2, y2), (x2+1, y2), (x2, y2+1), (x2+1, y2+1), (x3, y3), (x3+1, y3), (x3, y3+1), (x3+1, y3+1), (x4, y4), (x4+1, y4), (x4, y4+1), (x4+1, y4+1),]: - self.grid[(r,c)] = GridCellType.RACK - for m, n in [(a,b), (a+1,b), (a,b+1), (a+1,b+1)]: - self.grid[(m,n)] = GridCellType.PLACE + self.grid[(c,d)] = GridCellType.RACK + for e, f in [(a,b), (a+1,b), (a,b+1), (a+1,b+1)]: + self.grid[(e,f)] = GridCellType.PLACE + + diff --git a/main.py b/main.py index 89587e7..2cbd14b 100644 --- a/main.py +++ b/main.py @@ -1,35 +1,116 @@ import sys import pygame +from paczka import Paczka from wozek import Wozek import wyszukiwanie import ekran -from grid import SearchGrid +from grid import GridCellType, SearchGrid +from sklearn.tree import DecisionTreeClassifier +import pandas as pd + +from plansza import x1, y1, x2, y2, x3, y3, x4, y4, a_pix, b_pix pygame.init() def main(): wozek = Wozek() + paczka = Paczka('duzy', 10, 'ogród', False, True, False, any, any, any, any, any) + ekran.lista_paczek.add(paczka) + paczka.update_position(a_pix, b_pix) + + grid_points = SearchGrid() + while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit(0) if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: sys.exit(0) + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_SPACE: + ## wozek jedzie po paczke + wiersz = ekran.sprawdz_ktory_wiersz(a_pix) + kolumna = ekran.sprawdz_ktora_kolumna(b_pix) + docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 1) + + #wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan, grid_points) + wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + wozek.przemiesc_wozek_po_sciezce(sciezka) + + if grid_points.grid[(wiersz, kolumna)] is GridCellType.PLACE: #picks up package + if wozek.ln == 0: + wozek.load_package() + wozek.dynamic_wozek_picture + print(wozek.storage) + + ## wozek jedzie odlozyc paczke na regal + paczka1 = wozek.storage.pop() + + array, reg = paczka1.tablica_do_drzewa('ogród') + + 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']) + 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 + wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + wozek.przemiesc_wozek_po_sciezce(sciezka) + + # print(wozek.storage) + # if wozek.ln != 0: # drops package + # wozek.drop_package() + # wozek.dynamic_wozek_picture() + if event.type == pygame.MOUSEBUTTONDOWN: # lewy przycisk myszy if event.button == 1: - grid_points = SearchGrid() x = pygame.mouse.get_pos()[0] y = pygame.mouse.get_pos()[1] wiersz = ekran.sprawdz_ktory_wiersz(x) kolumna = ekran.sprawdz_ktora_kolumna(y) + docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 1) - # wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan, grid_points) + + #wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan, grid_points) wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) sciezka = wyszukiwanie.znajdz_sciezke(wezel) wozek.przemiesc_wozek_po_sciezce(sciezka) + # if grid_points.grid[(wiersz, kolumna)] is GridCellType.PLACE: #picks up package + # if wozek.ln == 0: + # wozek.load_package() + # wozek.dynamic_wozek_picture + # else: + # if wozek.ln != 0: # drops package + # wozek.drop_package() + # wozek.dynamic_wozek_picture() + if event.type == pygame.KEYDOWN: if event.key == pygame.K_DOWN: wozek.y_change = 1 @@ -46,14 +127,14 @@ def main(): if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT: wozek.x_change = 0 - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_SPACE: - if wozek.ln == 0: - wozek.load_package() - wozek.dynamic_wozek_picture() - else: - wozek.drop_package() - wozek.dynamic_wozek_picture() + # if event.type == pygame.KEYDOWN: + # if event.key == pygame.K_SPACE: + # if wozek.ln == 0: + # wozek.load_package() + # wozek.dynamic_wozek_picture() + # else: + # wozek.drop_package() + # wozek.dynamic_wozek_picture() wozek.obecnyStan.x += wozek.x_change wozek.obecnyStan.y += wozek.y_change diff --git a/packageList.py b/packageList.py index 22cbc53..1a08d98 100644 --- a/packageList.py +++ b/packageList.py @@ -1,6 +1,6 @@ import pygame -from paczka import Paczka +# from paczka import Paczka class listOfPackages: list = [] @@ -15,9 +15,12 @@ class listOfPackages: self.package_group.remove(last_package) -def zainicjuj_liste_paczek(init_x, init_y): - packageList = listOfPackages() - demo_paczka = Paczka('duzy', 10, any, False, True, False, any, any, any, any, any) - demo_paczka.update_position(init_x, init_y) - packageList.add(demo_paczka) - return packageList +# def zainicjuj_liste_paczek(init_x, init_y): +# packageList = listOfPackages() +# demo_paczka = Paczka('duzy', 10, any, False, True, False, any, any, any, any, any) +# demo_paczka.update_position(init_x, init_y) +# packageList.add(demo_paczka) +# return packageList + + + diff --git a/paczka.py b/paczka.py index 3d2fd32..87fb725 100644 --- a/paczka.py +++ b/paczka.py @@ -1,9 +1,9 @@ from etykieta import Etykieta import pygame +import ekran class Paczka(pygame.sprite.Sprite): - def __init__(self, rozmiar, waga, kategoria, priorytet, ksztalt, kruchosc, nadawca, adres, imie, nazwisko, telefon): super().__init__() self.rozmiar = rozmiar @@ -68,4 +68,58 @@ class Paczka(pygame.sprite.Sprite): def update_position(self, x, y): self.x = x self.y = y - self.rect.topleft = (x, y) \ No newline at end of file + self.rect.topleft = (x, y) + + def tablica_do_drzewa(self, kategoria): + tablica = [] + + # rozmiar + if self.rozmiar == 'maly': + tablica.append(0) + elif self.rozmiar == 'sredni': + tablica.append(1) + else: tablica.append(2) + + # waga + if self.waga == 'maly': + tablica.append(0) + elif self.waga == 'sredni': + tablica.append(1) + else: tablica.append(2) + + # piorytet + if self.priorytet is True: + tablica.append(0) + else: tablica.append(1) + + # kształt + if self.ksztalt is True: + tablica.append(0) + else: tablica.append(1) + + # kruchość + if self.kruchosc is True: + tablica.append(0) + else: tablica.append(1) + + reg = ekran.zwroc_regaly_kategoria(kategoria) + + # czy dolna wolna + if reg[0].is_dolna_free() is True: + tablica.append(0) + else: + tablica.append(1) + + #czy górna wolna + if reg[0].is_dolna_free() is True: + tablica.append(0) + else: + tablica.append(1) + + # czy na górnej więcej miejsca + if reg[0].is_dolna_free() is True: + tablica.append(0) + else: + tablica.append(1) + + return tablica, reg[0] \ No newline at end of file diff --git a/plansza.py b/plansza.py index 08e9a0c..d2f2546 100644 --- a/plansza.py +++ b/plansza.py @@ -2,7 +2,7 @@ import random def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele i = 1 - pixele = 73 + pixele = 70 while (i < wymiar): pixele = pixele + 70 i = i + 1 diff --git a/regal.py b/regal.py index 71234f8..89fbe12 100644 --- a/regal.py +++ b/regal.py @@ -1,5 +1,6 @@ import pygame +MAX_STORAGE = 3 def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele i = 1 @@ -13,19 +14,20 @@ def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podany def obliczPixeleDlugosciRegalu(self): #Przeliczanie dlugości regału podanego w kratkach na pixele i = 1 dlugoscRegalu = 40 - while (i < self.dlugoscRegaluWKratkach) and (i <= 11 - self.numerKolumny): #Sprawdzenie, żeby regał nie wychodził poza plansze, jeżeli tak to jest ucinany tak, żeby nie wychodził + while (i < 1) and (i <= 11 - self.numerKolumny): #Sprawdzenie, żeby regał nie wychodził poza plansze, jeżeli tak to jest ucinany tak, żeby nie wychodził dlugoscRegalu = dlugoscRegalu + 80 i = i + 1 return dlugoscRegalu class Regal(pygame.sprite.Sprite): - def __init__(self, numerRegalu, dlugoscRegaluWKratkach, numerWiersza, numerKolumny): + + def __init__(self, nazwaRegalu, numerWiersza, numerKolumny): super().__init__() from ekran import screen - self.numerRegalu = numerRegalu + self.nazwaRegalu = nazwaRegalu self.wysokoscRegalu = 64 - self.dlugoscRegaluWKratkach = dlugoscRegaluWKratkach self.numerKolumny = numerKolumny + self.numerWiersza = numerWiersza self.wiersz = obliczPixeleNaPodstawieKratek(numerWiersza) self.kolumna = obliczPixeleNaPodstawieKratek(numerKolumny) @@ -36,28 +38,52 @@ class Regal(pygame.sprite.Sprite): "dolna": package_storage, "gorna": package_storage } + + + storage_dolna = [] + storage_gorna = [] - if(self.numerRegalu >= 0 and self.numerRegalu <= 4): + self.dolna = storage_dolna + self.gorna = storage_gorna + + if(self.nazwaRegalu == 'ogród'): reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu]) reg = pygame.image.load("images/regal.png") self.rect = reg.get_rect() screen.blit(reg, (self.wiersz, self.kolumna)) - if(self.numerRegalu >= 5 and self.numerRegalu <= 8): + if(self.nazwaRegalu == 'narzedzia'): reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu]) reg = pygame.image.load("images/regal1.png") self.rect = reg.get_rect() screen.blit(reg, (self.wiersz, self.kolumna)) - if(self.numerRegalu >= 9 and self.numerRegalu <= 12): + if(self.nazwaRegalu == 'kuchnia'): reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu]) reg = pygame.image.load("images/regal2.png") self.rect = reg.get_rect() screen.blit(reg, (self.wiersz, self.kolumna)) - if(self.numerRegalu >= 13 and self.numerRegalu <= 16): + if(self.nazwaRegalu == 'motoryzacja'): reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu]) reg = pygame.image.load("images/regal3.png") self.rect = reg.get_rect() screen.blit(reg, (self.wiersz, self.kolumna)) + + def is_dolna_free(self): + if len(self.dolna) <= MAX_STORAGE: + return True + return False + + def is_gorna_free(self): + if len(self.gorna) <= MAX_STORAGE: + return True + return False + + def czy_na_gornej_wiecej_miejsca(self): + if len(self.gorna) > len(self.dolna): + return True + return False + + diff --git a/wozek.py b/wozek.py index a38cfac..867e5d1 100644 --- a/wozek.py +++ b/wozek.py @@ -1,7 +1,9 @@ import ekran import pygame,math -from packageList import listOfPackages +# from packageList import listOfPackages +from ekran import lista_paczek +listOfPackages = lista_paczek class Wozek(pygame.sprite.Sprite): def __init__(self): diff --git a/wyszukiwanie.py b/wyszukiwanie.py index 41c65f0..648a5bd 100644 --- a/wyszukiwanie.py +++ b/wyszukiwanie.py @@ -57,7 +57,7 @@ def znajdz_nastepcow(wezel, search_grid, ktory_algorytm): if ktory_algorytm == 1: x1 = x / 70 y1 = y / 70 - if search_grid.grid[(x1, y1)] is GridCellType.FREE: + if search_grid.grid[(x1, y1)] is GridCellType.FREE or search_grid.grid[(x1, y1)] is GridCellType.PLACE: wezly.append(ruch_w_przod) else: wezly.append(ruch_w_przod) @@ -131,7 +131,7 @@ def wyszukiwanie_a_star(poczatkowyStan, docelowyStan, search_grid): nastepca.g = g nastepca.h = h fringe[index] = nastepca - print(index) + # print(index) # heapq.heapify(fringe) return None @@ -147,6 +147,6 @@ def dobierz_wage_do_wezla(wezel, search_grid): elif search_grid.grid[(x1, y1)] is GridCellType.RACK: wezel.waga = 99999 elif search_grid.grid[(x1, y1)] is GridCellType.PLACE: - wezel.waga = 99999 + wezel.waga = 1 return None