Merge pull request 'drzewo_wiki' (#18) from drzewo_wiki into master

Reviewed-on: s474139/Inteligentny_Wozek#18
This commit is contained in:
Wiktoria Grzesik 2023-05-29 13:28:33 +02:00
commit 4670845a00
20 changed files with 527 additions and 69 deletions

View File

@ -3,6 +3,36 @@ import pandas as pd
from sklearn.tree import DecisionTreeClassifier from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz 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("training_data.txt", 'w') plikZPrzecinkami = open("training_data.txt", 'w')
with open('200permutations_table.txt', 'r') as plik: with open('200permutations_table.txt', 'r') as plik:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,11 +1,10 @@
import pygame import pygame
from plansza import x1, y1, x2, y2, x3, y3, x4, y4, a_pix, b_pix from plansza import x1, y1, x2, y2, x3, y3, x4, y4, a_pix, b_pix
import packageList from regal import Regal, obliczPixeleNaPodstawieKratek
import regal # import wozek
import wozek
from packageList import * from packageList import *
from paczka import Paczka # from paczka import Paczka
EKRAN_SZEROKOSC = 770 EKRAN_SZEROKOSC = 770
EKRAN_WYSOKOSC = 770 EKRAN_WYSOKOSC = 770
@ -16,29 +15,47 @@ pygame.display.set_caption("Inteligentny wozek")
icon = pygame.image.load('images/icon.png') icon = pygame.image.load('images/icon.png')
pygame.display.set_icon(icon) 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()
lista_paczek = []
lista_paczek_na_regalach = []
def narysuj_regaly(): def narysuj_regaly():
regal.Regal(1, 1, x1, y1) global lista_regalow
regal.Regal(2, 1, x1, y1+1) r1 = Regal('ogród', x1, y1)
regal.Regal(3, 1, x1+1, y1) r2 = Regal('ogród', x1, y1+1)
regal.Regal(4, 1, x1+1, y1+1) r3 = Regal('ogród', x1+1, y1)
r4 = Regal('ogród', x1+1, y1+1)
regal.Regal(5, 1, x2, y2) r5 = Regal('narzedzia', x2, y2)
regal.Regal(6, 1, x2, y2+1) r6 = Regal('narzedzia', x2, y2+1)
regal.Regal(7, 1, x2+1, y2) r7 = Regal('narzedzia', x2+1, y2)
regal.Regal(8, 1, x2+1, y2+1) r8 = Regal('narzedzia', x2+1, y2+1)
regal.Regal(9, 1, x3, y3) r9 = Regal('kuchnia', x3, y3)
regal.Regal(10, 1, x3, y3+1) r10 = Regal('kuchnia', x3, y3+1)
regal.Regal(11, 1, x3+1, y3) r11 = Regal('kuchnia', x3+1, y3)
regal.Regal(12, 1, x3+1, y3+1) r12 = Regal('kuchnia', x3+1, y3+1)
regal.Regal(13, 1, x4, y4) r13 = Regal('motoryzacja', x4, y4)
regal.Regal(14, 1, x4, y4+1) r14 = Regal('motoryzacja', x4, y4+1)
regal.Regal(15, 1, x4+1, y4) r15 = Regal('motoryzacja', x4+1, y4)
regal.Regal(16, 1, x4+1, y4+1) 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(): def narysuj_siatke():
blockSize = 70 # Set the size of the grid block blockSize = 70 # Set the size of the grid block
@ -54,6 +71,7 @@ def odswiez_ekran(wozek):
screen.blit(miejsce,(a_pix, b_pix)) screen.blit(miejsce,(a_pix, b_pix))
narysuj_siatke() narysuj_siatke()
narysuj_paczki(wozek) narysuj_paczki(wozek)
narysuj_paczke_na_regale()
narysuj_regaly() narysuj_regaly()
wozek.draw() wozek.draw()
pygame.display.flip() pygame.display.flip()
@ -76,6 +94,13 @@ def sprawdz_ktora_kolumna(y):
def narysuj_paczki(wozek): def narysuj_paczki(wozek):
if wozek.ln == 0: #if wozek.ln == 0:
for paczka in lista_paczek.list: #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) paczka.narysuj(paczka.x, paczka.y, screen)

19
grid.py
View File

@ -7,10 +7,17 @@ class GridCellType(Enum):
FREE = 0 FREE = 0
RACK = 1 RACK = 1
PLACE = 2 PLACE = 2
# dodać oznaczenie na miejsce dla paczek
# class RackCellType(Enum):
# OGROD = 0
# NARZEDZIA = 1
# KUCHNIA = 2
# MOTORYZACJA = 3
class SearchGrid: class SearchGrid:
grid: Dict[Tuple[int, int], GridCellType] = {} grid: Dict[Tuple[int, int], GridCellType] = {}
# rack_grid : Dict[Tuple[int, int], GridCellType] = {}
def __init__(self) -> None: def __init__(self) -> None:
self._init_grid() self._init_grid()
@ -19,8 +26,10 @@ class SearchGrid:
for i in range (0,14): for i in range (0,14):
for j in range(0,14): for j in range(0,14):
self.grid[(i, j)] = GridCellType.FREE 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),]: (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 self.grid[(c,d)] = GridCellType.RACK
for m, n in [(a,b), (a+1,b), (a,b+1), (a+1,b+1)]: for e, f in [(a,b), (a+1,b), (a,b+1), (a+1,b+1)]:
self.grid[(m,n)] = GridCellType.PLACE self.grid[(e,f)] = GridCellType.PLACE

116
main.py
View File

@ -1,35 +1,117 @@
import sys import sys
import pygame import pygame
from paczka import Paczka
from wozek import Wozek from wozek import Wozek
import wyszukiwanie import wyszukiwanie
import ekran import ekran
from grid import SearchGrid from grid import GridCellType, SearchGrid
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
from plansza import a_pix, b_pix
pygame.init() pygame.init()
def main(): def main():
wozek = Wozek() 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)
grid_points = SearchGrid()
while True: while True:
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
sys.exit(0) sys.exit(0)
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
sys.exit(0) sys.exit(0)
if event.type == pygame.MOUSEBUTTONDOWN: if event.type == pygame.KEYDOWN:
# lewy przycisk myszy if event.key == pygame.K_SPACE:
if event.button == 1: ## wozek jedzie po paczke
grid_points = SearchGrid() wiersz = ekran.sprawdz_ktory_wiersz(a_pix)
x = pygame.mouse.get_pos()[0] kolumna = ekran.sprawdz_ktora_kolumna(b_pix)
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) 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) wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points)
sciezka = wyszukiwanie.znajdz_sciezke(wezel) sciezka = wyszukiwanie.znajdz_sciezke(wezel)
wozek.przemiesc_wozek_po_sciezce(sciezka) wozek.przemiesc_wozek_po_sciezce(sciezka)
if grid_points.grid[(wiersz, kolumna)] is GridCellType.PLACE: #picks up package
if wozek.ln == 0:
wozek.picks_up_package()
wozek.dynamic_wozek_picture()
## wozek jedzie odlozyc paczke na regal
przenoszona_paczka = wozek.storage[-1]
array, reg = przenoszona_paczka.tablica_do_drzewa(przenoszona_paczka.kategoria)
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)
if wozek.ln != 0: # drops package
wozek.drops_package(przenoszona_paczka, reg, predictions)
wozek.dynamic_wozek_picture()
if event.type == pygame.MOUSEBUTTONDOWN:
# lewy przycisk myszy
if event.button == 1:
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_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.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN: if event.key == pygame.K_DOWN:
wozek.y_change = 1 wozek.y_change = 1
@ -46,14 +128,14 @@ def main():
if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT: if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
wozek.x_change = 0 wozek.x_change = 0
if event.type == pygame.KEYDOWN: # if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE: # if event.key == pygame.K_SPACE:
if wozek.ln == 0: # if wozek.ln == 0:
wozek.load_package() # wozek.load_package()
wozek.dynamic_wozek_picture() # wozek.dynamic_wozek_picture()
else: # else:
wozek.drop_package() # wozek.drop_package()
wozek.dynamic_wozek_picture() # wozek.dynamic_wozek_picture()
wozek.obecnyStan.x += wozek.x_change wozek.obecnyStan.x += wozek.x_change
wozek.obecnyStan.y += wozek.y_change wozek.obecnyStan.y += wozek.y_change

View File

@ -1,6 +1,6 @@
import pygame import pygame
from paczka import Paczka # from paczka import Paczka
class listOfPackages: class listOfPackages:
list = [] list = []
@ -15,9 +15,12 @@ class listOfPackages:
self.package_group.remove(last_package) self.package_group.remove(last_package)
def zainicjuj_liste_paczek(init_x, init_y): # def zainicjuj_liste_paczek(init_x, init_y):
packageList = listOfPackages() # packageList = listOfPackages()
demo_paczka = Paczka('duzy', 10, any, False, True, False, any, any, any, any, any) # demo_paczka = Paczka('duzy', 10, any, False, True, False, any, any, any, any, any)
demo_paczka.update_position(init_x, init_y) # demo_paczka.update_position(init_x, init_y)
packageList.add(demo_paczka) # packageList.add(demo_paczka)
return packageList # return packageList

View File

@ -1,9 +1,9 @@
from etykieta import Etykieta from etykieta import Etykieta
import pygame import pygame
import ekran
class Paczka(pygame.sprite.Sprite): class Paczka(pygame.sprite.Sprite):
def __init__(self, rozmiar, waga, kategoria, priorytet, ksztalt, kruchosc, nadawca, adres, imie, nazwisko, telefon): def __init__(self, rozmiar, waga, kategoria, priorytet, ksztalt, kruchosc, nadawca, adres, imie, nazwisko, telefon):
super().__init__() super().__init__()
self.rozmiar = rozmiar self.rozmiar = rozmiar
@ -34,6 +34,7 @@ class Paczka(pygame.sprite.Sprite):
self.x = 430 self.x = 430
self.y = 400 self.y = 400
self.label = Etykieta(nadawca, adres, imie, nazwisko, telefon, priorytet) self.label = Etykieta(nadawca, adres, imie, nazwisko, telefon, priorytet)
self.is_in_move = False
# zmienia rozmiar obrazka w zaleznosci od rozmiaru # zmienia rozmiar obrazka w zaleznosci od rozmiaru
def __dobierz_rozmiar_obrazka(self): def __dobierz_rozmiar_obrazka(self):
@ -69,3 +70,55 @@ class Paczka(pygame.sprite.Sprite):
self.x = x self.x = x
self.y = y self.y = y
self.rect.topleft = (x, y) 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 <= 2:
tablica.append(0)
elif self.waga <= 10:
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]

View File

@ -2,7 +2,7 @@ import random
def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele
i = 1 i = 1
pixele = 73 pixele = 70
while (i < wymiar): while (i < wymiar):
pixele = pixele + 70 pixele = pixele + 70
i = i + 1 i = i + 1

View File

@ -1,5 +1,6 @@
import pygame import pygame
MAX_STORAGE = 3
def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele
i = 1 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 def obliczPixeleDlugosciRegalu(self): #Przeliczanie dlugości regału podanego w kratkach na pixele
i = 1 i = 1
dlugoscRegalu = 40 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 dlugoscRegalu = dlugoscRegalu + 80
i = i + 1 i = i + 1
return dlugoscRegalu return dlugoscRegalu
class Regal(pygame.sprite.Sprite): class Regal(pygame.sprite.Sprite):
def __init__(self, numerRegalu, dlugoscRegaluWKratkach, numerWiersza, numerKolumny):
def __init__(self, nazwaRegalu, numerWiersza, numerKolumny):
super().__init__() super().__init__()
from ekran import screen from ekran import screen
self.numerRegalu = numerRegalu self.nazwaRegalu = nazwaRegalu
self.wysokoscRegalu = 64 self.wysokoscRegalu = 64
self.dlugoscRegaluWKratkach = dlugoscRegaluWKratkach
self.numerKolumny = numerKolumny self.numerKolumny = numerKolumny
self.numerWiersza = numerWiersza
self.wiersz = obliczPixeleNaPodstawieKratek(numerWiersza) self.wiersz = obliczPixeleNaPodstawieKratek(numerWiersza)
self.kolumna = obliczPixeleNaPodstawieKratek(numerKolumny) self.kolumna = obliczPixeleNaPodstawieKratek(numerKolumny)
@ -37,27 +39,57 @@ class Regal(pygame.sprite.Sprite):
"gorna": package_storage "gorna": package_storage
} }
if(self.numerRegalu >= 0 and self.numerRegalu <= 4):
storage_dolna = []
storage_gorna = []
self.dolna = storage_dolna
self.gorna = storage_gorna
if(self.nazwaRegalu == 'ogród'):
reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu]) reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu])
reg = pygame.image.load("images/regal.png") reg = pygame.image.load("images/regal.png")
self.rect = reg.get_rect() self.rect = reg.get_rect()
screen.blit(reg, (self.wiersz, self.kolumna)) 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.Surface([self.dlugosc, self.wysokoscRegalu])
reg = pygame.image.load("images/regal1.png") reg = pygame.image.load("images/regal1.png")
self.rect = reg.get_rect() self.rect = reg.get_rect()
screen.blit(reg, (self.wiersz, self.kolumna)) 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.Surface([self.dlugosc, self.wysokoscRegalu])
reg = pygame.image.load("images/regal2.png") reg = pygame.image.load("images/regal2.png")
self.rect = reg.get_rect() self.rect = reg.get_rect()
screen.blit(reg, (self.wiersz, self.kolumna)) 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.Surface([self.dlugosc, self.wysokoscRegalu])
reg = pygame.image.load("images/regal3.png") reg = pygame.image.load("images/regal3.png")
self.rect = reg.get_rect() self.rect = reg.get_rect()
screen.blit(reg, (self.wiersz, self.kolumna)) 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
def put_package_on_the_regal(self, package, where):
if(where == 0):
self.dolna.append(package)
else:
self.gorna.append(package)

200
training_data.txt Normal file
View File

@ -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

View File

@ -1,7 +1,9 @@
import ekran import ekran
import pygame,math import pygame,math
from packageList import listOfPackages # from packageList import listOfPackages
from ekran import lista_paczek
listOfPackages = lista_paczek
class Wozek(pygame.sprite.Sprite): class Wozek(pygame.sprite.Sprite):
def __init__(self): def __init__(self):
@ -61,11 +63,18 @@ class Wozek(pygame.sprite.Sprite):
def load_package(self): def load_package(self):
for package in listOfPackages.list: #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) dist = math.sqrt((self.obecnyStan.x - package.x)**2 + (self.obecnyStan.y - package.y)**2)
if dist <= 50: if dist <= 50:
self.add_element(package) self.add_element(package)
listOfPackages.list.pop() # listOfPackages.list.pop()
def load_packages_collision(self): def load_packages_collision(self):
pass pass
@ -80,7 +89,8 @@ class Wozek(pygame.sprite.Sprite):
if package is not None: if package is not None:
package.x = self.obecnyStan.x package.x = self.obecnyStan.x
package.y = self.obecnyStan.y package.y = self.obecnyStan.y
listOfPackages.list.append(package) # listOfPackages.list.append(package)
listOfPackages.append(package)
def __zainicjuj_stan_poczatkowy(self): def __zainicjuj_stan_poczatkowy(self):
from wyszukiwanie import Stan from wyszukiwanie import Stan
@ -112,3 +122,17 @@ class Wozek(pygame.sprite.Sprite):
else: else:
self.image = pygame.transform.rotate(self.image, 90) self.image = pygame.transform.rotate(self.image, 90)
def picks_up_package(self):
paczka_pop = ekran.lista_paczek.pop()
ekran.lista_paczek_na_regalach.append(paczka_pop)
paczka_pop.is_in_move = True
self.storage.append(paczka_pop)
self.ln = self.ln + 1
def drops_package(self, paczka, reg, predictions):
paczka.update_position(reg.numerWiersza*70, reg.numerKolumny*70)
paczka.is_in_move = False
self.storage.pop()
self.ln = self.ln - 1
reg.put_package_on_the_regal(paczka, predictions)

View File

@ -57,7 +57,7 @@ def znajdz_nastepcow(wezel, search_grid, ktory_algorytm):
if ktory_algorytm == 1: if ktory_algorytm == 1:
x1 = x / 70 x1 = x / 70
y1 = y / 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) wezly.append(ruch_w_przod)
else: else:
wezly.append(ruch_w_przod) wezly.append(ruch_w_przod)
@ -131,7 +131,7 @@ def wyszukiwanie_a_star(poczatkowyStan, docelowyStan, search_grid):
nastepca.g = g nastepca.g = g
nastepca.h = h nastepca.h = h
fringe[index] = nastepca fringe[index] = nastepca
print(index) # print(index)
# heapq.heapify(fringe) # heapq.heapify(fringe)
return None return None
@ -147,6 +147,6 @@ def dobierz_wage_do_wezla(wezel, search_grid):
elif search_grid.grid[(x1, y1)] is GridCellType.RACK: elif search_grid.grid[(x1, y1)] is GridCellType.RACK:
wezel.waga = 99999 wezel.waga = 99999
elif search_grid.grid[(x1, y1)] is GridCellType.PLACE: elif search_grid.grid[(x1, y1)] is GridCellType.PLACE:
wezel.waga = 99999 wezel.waga = 1
return None return None