Compare commits

..

No commits in common. "master" and "alg_gen_mutacja" have entirely different histories.

19 changed files with 216 additions and 117 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -17,13 +17,17 @@ 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
def wygeneruj_populacje_poczatkowa(liczebnosc_populacji):
populacja = list()
zasieg = int((EKRAN_WYSOKOSC / blockSize) - 3)
zasieg = int(EKRAN_WYSOKOSC / blockSize - 3)
ilosc_wspolrzednych = (LICZBA_REGALOW + LICZBA_MIEJSC_NA_PACZKE + LICZBA_SKRZYNEK_NA_LISTY)
for i in range(liczebnosc_populacji):
osobnik = wygeneruj_osobnika(zasieg, ilosc_wspolrzednych)
@ -58,8 +62,8 @@ def ocena_osobnika(osobnik):
def mutacja(osobnik):
# mutacja poprzez zamiane randomowej pary koordynatow
index_osobnika = random.randint(0, len(osobnik) - 1)
x = random.randint(1, (EKRAN_SZEROKOSC / blockSize) - 3)
y = random.randint(1, (EKRAN_WYSOKOSC / blockSize) - 3)
x = random.randint(1, EKRAN_SZEROKOSC / blockSize - 2)
y = random.randint(1, EKRAN_WYSOKOSC / blockSize - 2)
osobnik[index_osobnika] = (x, y)
def krzyzowanie(rodzic1, rodzic2):
@ -106,4 +110,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,8 +108,4 @@ 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)
def dodaj_na_rampe_jedno(order):
lista_itemow.append(order)
order.update_position(plansza.a_pix, plansza.b_pix)
l2.update_position(plansza.a_pix, plansza.b_pix)

11
grid.py
View File

@ -9,9 +9,16 @@ 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()
@ -24,4 +31,6 @@ 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

View File

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

169
main.py
View File

@ -1,5 +1,4 @@
import sys
import random
import joblib
import pygame
@ -20,10 +19,8 @@ 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)
@ -38,18 +35,61 @@ 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:
while len(ekran.lista_itemow) > 0:
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)
if event.key == pygame.K_n:
add_another_order(ekran, pred_list)
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.type == pygame.MOUSEBUTTONDOWN:
if event.type == pygame.MOUSEBUTTONDOWN:
# lewy przycisk myszy
if event.button == 1:
x = pygame.mouse.get_pos()[0]
@ -57,94 +97,33 @@ 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,4 @@
import algorytm_genetyczny as genetic
import random
def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele
i = 1
@ -17,11 +17,45 @@ blockSize = 70
x1, y1, x2, y2, x3, y3, x4, y4 = [None] * 8
najlepszy_osobnik = genetic.ewolucja()
print("Generowana plansza:")
genetic.print_board(najlepszy_osobnik)
while True:
(x1, y1), (x2, y2), (x3, y3), (x4, y4), (a, b), (c, d) = najlepszy_osobnik[:6]
#wspolrzedne regalow
x1 = random.randint(1, 3)
x2 = random.randint(1, 3)
x3 = random.randint(6, 8)
x4 = random.randint(6, 8)
y1 = random.randint(1, 3)
y2 = random.randint(6, 8)
y3 = random.randint(1, 3)
y4 = random.randint(6, 8)
#wspolrzedne miejsca paczek
a = 5
b = 5
#wspolrzedne skrzynki na listy
c = 5
d = 0
#dodane wspolrzedne (0, 0), (4, 4), (4, 6), (6, 4), (6, 6) zeby regaly sie nie stykaly
table = [(0, 0), (4, 4), (4, 6), (6, 4), (6, 6),
(x1, y1), (x1+1, y1), (x1, y1+1), (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)]
#sprawdzenie czy jakies wspolrzedne sie pokrywaja
if len(table) == len(set(table)):
break
coordinates = [(x1, y1), (x2, y2), (x3, y3), (x4, y4)]
#przemieszanie koordynatów w parach
random.shuffle(coordinates)
#przypisanie przemieszanych wartości do zmiennych
(x1, y1), (x2, y2), (x3, y3), (x4, y4) = coordinates
x1, x2, x3, x4, y1, y2, y3, y4 = map(int, [x1, x2, x3, x4, y1, y2, y3, y4])

View File

@ -4,6 +4,7 @@ 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
@ -32,6 +33,13 @@ 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 = []
@ -81,4 +89,7 @@ class Regal(pygame.sprite.Sprite):
if(where == 0):
self.dolna.append(package)
else:
self.gorna.append(package)
self.gorna.append(package)

View File

@ -1,5 +1,6 @@
import ekran
import pygame
import pygame,math
# from packageList import listOfPackages
from ekran import lista_itemow
from letter import Letter
import plansza
@ -12,19 +13,40 @@ class Wozek(pygame.sprite.Sprite):
self.obecnyStan = None
self.height = 64
self.width = 64
# 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()
# Credit: Forklift icons created by Smashicons - Flaticon
# https://www.flaticon.com/free-icons/forklift
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")
@ -35,7 +57,38 @@ 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()
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)
def __zainicjuj_stan_poczatkowy(self):
from wyszukiwanie import Stan