Compare commits

...

9 Commits

19 changed files with 109 additions and 175 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -17,10 +17,6 @@ def wygeneruj_osobnika(zasieg_wspolrzednych, ilosc_wspolrzednych):
x = random.randint(1, zasieg_wspolrzednych)
y = random.randint(1, zasieg_wspolrzednych)
e = (x, y)
while e in osobnik:
x = random.randint(1, zasieg_wspolrzednych)
y = random.randint(1, zasieg_wspolrzednych)
e = (x, y)
osobnik.append(e)
return osobnik
@ -110,4 +106,4 @@ def print_board(osobnik):
# uruchomienie algorytmu genetycznego
# najlepszy_osobnik = ewolucja()
# print_board(najlepszy_osobnik)
# print_board(najlepszy_osobnik)

View File

@ -46,4 +46,4 @@ def stworz_plik_drzewa_w_pdf(clf, feature_names, class_names):
graph = graphviz.Source(dot_data)
# Wyświetlanie drzewa
graph.view()
graph.view()

View File

@ -108,4 +108,8 @@ def dodaj_na_rampe(p1, p2, l1, l2):
p1.update_position(plansza.a_pix, plansza.b_pix)
p2.update_position(plansza.a_pix, plansza.b_pix)
l1.update_position(plansza.a_pix, plansza.b_pix)
l2.update_position(plansza.a_pix, plansza.b_pix)
l2.update_position(plansza.a_pix, plansza.b_pix)
def dodaj_na_rampe_jedno(order):
lista_itemow.append(order)
order.update_position(plansza.a_pix, plansza.b_pix)

11
grid.py
View File

@ -9,16 +9,9 @@ class GridCellType(Enum):
RACK = 1
PLACE = 2
# 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()
@ -31,6 +24,4 @@ class SearchGrid:
(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[(c,d)] = GridCellType.RACK
for e, f in [(plansza.a, plansza.b),(plansza.c, plansza.d)]:
self.grid[(e,f)] = GridCellType.PLACE
self.grid[(e,f)] = GridCellType.PLACE

BIN
images/Items_test/test5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
images/Items_test/test6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

BIN
images/Items_test/test7.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
images/Items_test/test8.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@ -1,7 +1,5 @@
import pygame
# from paczka import Paczka
class listOfItems:
list = []
item_group = pygame.sprite.Group()
@ -12,15 +10,4 @@ class listOfItems:
def remove(self):
last_item = self.list.pop()
self.item_group.remove(last_item)
# 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
self.item_group.remove(last_item)

169
main.py
View File

@ -1,4 +1,5 @@
import sys
import random
import joblib
import pygame
@ -19,8 +20,10 @@ pygame.init()
def main():
wozek = Wozek()
pred_list = prediction.prediction_keys()
p1 = Paczka('duzy', 12, 'narzedzia', False, True, False, any, any, any, any, any, pred_list[3])
p2 = Paczka('maly', 1, 'ogród', False, True, False, any, any, any, any, any, pred_list[1])
p1 = Paczka('duzy', 12, 'narzedzia', False, True, False,
any, any, any, any, any, pred_list[3])
p2 = Paczka('maly', 1, 'ogród', False, True, False,
any, any, any, any, any, pred_list[1])
l1 = Letter(pred_list[0])
l2 = Letter(pred_list[2])
ekran.dodaj_na_rampe(p2, l1, p1, l2)
@ -35,61 +38,18 @@ def main():
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 itemy
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)
while len(ekran.lista_itemow) > 0:
wozek_serves_orders(wozek, grid_points, drzewo)
## sprawdzenie czy lista itemow nie jest pusta
if ekran.lista_itemow:
if grid_points.grid[(wiersz, kolumna)] is GridCellType.PLACE: #picks up item
if wozek.ln == 0:
wozek.picks_up_item()
wozek.dynamic_wozek_picture()
przenoszony_item = wozek.storage[-1]
if (prediction.predict_one(przenoszony_item.img_path)=='package'):
## wozek jedzie odlozyc paczke na regal
przenoszona_paczka = przenoszony_item
array, reg = przenoszona_paczka.tablica_do_drzewa(przenoszona_paczka.kategoria)
predictions = drzewo.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)
wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points)
sciezka = wyszukiwanie.znajdz_sciezke(wezel)
wozek.przemiesc_wozek_po_sciezce(sciezka)
if wozek.ln != 0: # drops package
wozek.drops_package(przenoszona_paczka, reg, predictions)
wozek.dynamic_wozek_picture()
else:
#list przenoszony do skrzynki
docelowy_stan = wyszukiwanie.Stan(plansza.c_pix, plansza.d_pix, 1)
wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points)
sciezka = wyszukiwanie.znajdz_sciezke(wezel)
wozek.przemiesc_wozek_po_sciezce(sciezka)
if wozek.ln != 0: # drops letter
wozek.drops_letter(przenoszony_item)
wozek.dynamic_wozek_picture()
if event.key == pygame.K_n:
add_another_order(ekran, pred_list)
wozek_serves_orders(wozek, grid_points, drzewo)
if event.type == pygame.MOUSEBUTTONDOWN:
if event.type == pygame.MOUSEBUTTONDOWN:
# lewy przycisk myszy
if event.button == 1:
x = pygame.mouse.get_pos()[0]
@ -97,33 +57,94 @@ def main():
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_a_star(wozek.obecnyStan, docelowy_stan, grid_points)
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
# else:
# if wozek.ln != 0: # drops package
# 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()
ekran.odswiez_ekran(wozek)
def wozek_serves_orders(wozek, grid_points, drzewo):
# wozek jedzie po itemy
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)
# sprawdzenie czy lista itemow nie jest pusta
if ekran.lista_itemow:
if grid_points.grid[(wiersz, kolumna)] is GridCellType.PLACE: # picks up item
if wozek.ln == 0:
wozek.picks_up_item()
wozek.dynamic_wozek_picture()
przenoszony_item = wozek.storage[-1]
if (prediction.predict_one(przenoszony_item.img_path) == 'package'):
# wozek jedzie odlozyc paczke na regal
przenoszona_paczka = przenoszony_item
array, reg = przenoszona_paczka.tablica_do_drzewa(
przenoszona_paczka.kategoria)
predictions = drzewo.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)
wezel = wyszukiwanie.wyszukiwanie_a_star(
wozek.obecnyStan, docelowy_stan, grid_points)
sciezka = wyszukiwanie.znajdz_sciezke(wezel)
wozek.przemiesc_wozek_po_sciezce(sciezka)
if wozek.ln != 0: # drops package
wozek.drops_package(
przenoszona_paczka, reg, predictions)
wozek.dynamic_wozek_picture()
else:
# list przenoszony do skrzynki
docelowy_stan = wyszukiwanie.Stan(
plansza.c_pix, plansza.d_pix, 1)
wezel = wyszukiwanie.wyszukiwanie_a_star(
wozek.obecnyStan, docelowy_stan, grid_points)
sciezka = wyszukiwanie.znajdz_sciezke(wezel)
wozek.przemiesc_wozek_po_sciezce(sciezka)
if wozek.ln != 0: # drops letter
wozek.drops_letter(przenoszony_item)
wozek.dynamic_wozek_picture()
def add_another_order(ekran, pred_list):
if random.random() < 0.5:
if random.random() < 0.5:
order = Paczka('duzy', 12, 'motoryzacja', False, True, False,
any, any, any, any, any, pred_list[6])
else:
order = Paczka('maly', 1, 'kuchnia', False, True, False,
any, any, any, any, any, pred_list[7])
else:
if random.random() < 0.5:
order = Letter(pred_list[5])
else:
order = Letter(pred_list[4])
ekran.dodaj_na_rampe_jedno(order)
if __name__ == "__main__":
main()

View File

@ -1,4 +1,3 @@
import random
import algorytm_genetyczny as genetic
def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele

View File

@ -4,7 +4,6 @@ MAX_STORAGE = 3
def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele
i = 1
# pixele = 100
pixele = 73
while (i < wymiar):
pixele = pixele + 70
@ -33,13 +32,6 @@ class Regal(pygame.sprite.Sprite):
self.kolumna = obliczPixeleNaPodstawieKratek(numerKolumny)
self.dlugosc = obliczPixeleDlugosciRegalu(self)
package_storage = []
shelfs = { # here packages are stored
"dolna": package_storage,
"gorna": package_storage
}
storage_dolna = []
storage_gorna = []
@ -89,7 +81,4 @@ class Regal(pygame.sprite.Sprite):
if(where == 0):
self.dolna.append(package)
else:
self.gorna.append(package)
self.gorna.append(package)

View File

@ -1,6 +1,5 @@
import ekran
import pygame,math
# from packageList import listOfPackages
import pygame
from ekran import lista_itemow
from letter import Letter
import plansza
@ -13,40 +12,19 @@ class Wozek(pygame.sprite.Sprite):
self.obecnyStan = None
self.height = 64
self.width = 64
self.image = pygame.image.load("images/pusty_wozek.png")
self.rect = self.image.get_rect()
# Credit: Forklift icons created by Smashicons - Flaticon
# https://www.flaticon.com/free-icons/forklift
self.image = pygame.image.load("images/pusty_wozek.png")
self.rect = self.image.get_rect()
self.__zainicjuj_stan_poczatkowy()
def draw(self):
ekran.screen.blit(self.image, (self.obecnyStan.x, self.obecnyStan.y))
# self.update_position(self.obecnyStan.x, self.obecnyStan.y)
#storage = ["none"] * 10
storage = []
max_size = 10
ln = len(storage)
def add_element(self, element):
if self.ln < self.max_size:
self.storage.append(element)
self.ln=self.ln+1
else:
print("I'm full!")
def remove_element(self):
if self.ln > 0:
element = self.storage.pop()
self.ln=self.ln-1
return element
else:
print("I'm empty!")
def update_position(self, x, y):
self.obecnyStan.x = x
self.obecnyStan.y = y
self.rect.topleft = (x, y)
def dynamic_wozek_picture(self):
if self.ln == 0:
self.image = pygame.image.load("images/pusty_wozek.png")
@ -57,38 +35,7 @@ class Wozek(pygame.sprite.Sprite):
elif (self.ln == 10):
self.image = pygame.image.load("images/pelny_wozek_full_3_crates.png")
self.rect = self.image.get_rect()
def load_package(self):
#for package in listOfPackages.list:
# for package in listOfPackages:
# dist = math.sqrt((self.obecnyStan.x - package.x)**2 + (self.obecnyStan.y - package.y)**2)
# if dist <= 50:
# self.add_element(package)
# # listOfPackages.list.pop()
# listOfPackages.pop()
package = listOfPackages.pop()
dist = math.sqrt((self.obecnyStan.x - package.x)**2 + (self.obecnyStan.y - package.y)**2)
if dist <= 50:
self.add_element(package)
# listOfPackages.list.pop()
def load_packages_collision(self):
pass
# packages_collision = pygame.sprite.spritecollide(self, listOfPackages.package_group, False)
# if packages_collision:
# for package in packages_collision:
# self.add_element(package)
# listOfPackages.list.remove(package) # collision doesn't work, collision always happens
def drop_package(self):
package = self.remove_element()
if package is not None:
package.x = self.obecnyStan.x
package.y = self.obecnyStan.y
# listOfPackages.list.append(package)
listOfPackages.append(package)
self.rect = self.image.get_rect()
def __zainicjuj_stan_poczatkowy(self):
from wyszukiwanie import Stan