From d15203280d6c76e8784730cb015e9a21d3305fe4 Mon Sep 17 00:00:00 2001 From: Dominik Jagosz Date: Wed, 8 Jun 2022 09:56:20 +0200 Subject: [PATCH] zmiana nadaj_cel_agentowi(); ustawienie(); wroc() --- .idea/Sztuczna_Inteligencja_Gr16.iml | 2 +- .idea/misc.xml | 2 +- enumy_i_slowniki.py | 4 +- main.py | 113 ++++++++++++++------------- neural_network.py | 22 +++--- rescue.py | 47 ++++++----- stale.py | 13 +-- stan_nastepnik.py | 3 +- szafka2.py | 4 - 9 files changed, 111 insertions(+), 99 deletions(-) diff --git a/.idea/Sztuczna_Inteligencja_Gr16.iml b/.idea/Sztuczna_Inteligencja_Gr16.iml index 4335812..658e1d5 100644 --- a/.idea/Sztuczna_Inteligencja_Gr16.iml +++ b/.idea/Sztuczna_Inteligencja_Gr16.iml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 0a4fd2a..353cd96 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/enumy_i_slowniki.py b/enumy_i_slowniki.py index 42e2a8c..5ded3ce 100644 --- a/enumy_i_slowniki.py +++ b/enumy_i_slowniki.py @@ -36,8 +36,8 @@ class ZawartoscPola(Enum): CEL = 2 DYWAN = 3 KALUZA = 4 - SCIANA2=5 - OSOBA=6 + SCIANA2 = 5 + OSOBA = 6 ZawartoscPolaNaKolorPola = { diff --git a/main.py b/main.py index a350dca..f5c1a77 100644 --- a/main.py +++ b/main.py @@ -1,16 +1,17 @@ import ctypes import os +import random import threading import pygame.transform import szafka2 from agent import * +from neural_network import * from okno import * from ramy_czyli_wiedza_agenta import * from rescue import * -from neural_network import * -import random + # aby działalo w oknie + rozdzielczość ekranu # ctypes.windll.shcore.SetProcessDpiAwareness(1) @@ -39,80 +40,81 @@ def dodaj_szafke(numerSzafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, po poczatek_kolumna, krata_magazynu) Pomieszczenie.dodajSzafke(szafka) + def gdzie_paczka(numerSzafki): global kolumna, wiersz if numerSzafki == 1: - kolumna =random.randint(1,2) - if kolumna ==1: - wiersz = random.randint(2,13) + kolumna = random.randint(1, 2) + if kolumna == 1: + wiersz = random.randint(2, 13) else: - wiersz = random.choice([1,14]) + wiersz = random.choice([1, 14]) if numerSzafki == 2: - kolumna = random.randint(3,4) + kolumna = random.randint(3, 4) if kolumna == 3: - wiersz = random.choice([1, 14]) + wiersz = random.choice([1, 14]) else: wiersz = random.randint(2, 13) if numerSzafki == 3: - kolumna = random.randint(5,8) + kolumna = random.randint(5, 8) if kolumna == 5: - wiersz = random.randint(1,5) + wiersz = random.randint(1, 5) if kolumna == 6: - wiersz = random.choice([0,6]) + wiersz = random.choice([0, 6]) if kolumna == 7: - wiersz = random.choice([0,7]) + wiersz = random.choice([0, 7]) if kolumna == 8: - wiersz= random.randint(1,6) + wiersz = random.randint(1, 6) if numerSzafki == 4: - kolumna = random.randint(5,8) + kolumna = random.randint(5, 8) if kolumna == 5: - wiersz = random.randint(9,12) - if kolumna==6: - wiersz = random.choice([8,13]) - if kolumna ==7: - wiersz = random.choice([9,13]) - if kolumna==8: - wiersz = random.randint(10,12) + wiersz = random.randint(9, 12) + if kolumna == 6: + wiersz = random.choice([8, 13]) + if kolumna == 7: + wiersz = random.choice([9, 13]) + if kolumna == 8: + wiersz = random.randint(10, 12) if numerSzafki == 5: - kolumna = random.randint(10,12) + kolumna = random.randint(10, 12) if kolumna == 11: - wiersz = random.choice([2,11]) + wiersz = random.choice([2, 11]) else: - wiersz = random.randint(3,10) + wiersz = random.randint(3, 10) if numerSzafki == 6: - kolumna = random.randint(12,14) + kolumna = random.randint(12, 14) if kolumna == 13: - wiersz = random.choice([1,12]) + wiersz = random.choice([1, 12]) else: - wiersz = random.randint(2,11) + wiersz = random.randint(2, 11) if numerSzafki == 7: - kolumna = random.randint(17,19) + kolumna = random.randint(17, 19) if kolumna == 18: - wiersz = random.choice([0,13]) + wiersz = random.choice([0, 13]) else: - wiersz =random.randint(1,12) + wiersz = random.randint(1, 12) if numerSzafki == 8: - kolumna = random.randint(22,24) + kolumna = random.randint(22, 24) if kolumna == 23: - wiersz =random.choice([4,12]) + wiersz = random.choice([4, 12]) else: - wiersz =random.randint(5,11) + wiersz = random.randint(5, 11) if numerSzafki == 9: - kolumna = random.randint(24,26) + kolumna = random.randint(24, 26) if kolumna == 25: - wiersz =random.choice([0,13]) + wiersz = random.choice([0, 13]) else: - wiersz =random.randint(1,12) + wiersz = random.randint(1, 12) if numerSzafki == 10: - kolumna =random.randint(27,29) + kolumna = random.randint(27, 29) if kolumna == 28: - wiersz = random.choice([4,14]) + wiersz = random.choice([4, 14]) else: wiersz = random.randint(5, 13) if numerSzafki == 11: - kolumna=0 - wiersz=0 - print(wiersz,kolumna) + kolumna = 0 + wiersz = 0 + print(wiersz, kolumna) return wiersz, kolumna @@ -120,7 +122,7 @@ def ustawienie(): ostatnia = recognition() print(ostatnia) kierunek = Kierunek(random.randint(0, 3)) - wiersz, kolumna = gdzie_paczka(ostatnia+1) + wiersz, kolumna = gdzie_paczka(ostatnia + 1) return Stan(kierunek, PoleKraty(krata_magazynu, wiersz, kolumna)) @@ -137,18 +139,16 @@ def zaznacz_cel_na_mapie(cel: Stan): krata_magazynu.krata[wiersz][kolumna] = ZawartoscPola.CEL -def nadaj_cel_agentowi(agent: Agent): - agent.cel = ustawienie() +def nadaj_cel_agentowi(agent: Agent, cel: Cel): + agent.cel = cel zaznacz_cel_na_mapie(agent.cel) print("CEL:", agent.cel.poleStartoweGorne.wiersz, agent.cel.poleStartoweGorne.kolumna) -def cel_wroc(agent:Agent): - agent.cel = wroc() - zaznacz_cel_na_mapie(agent.cel) def zdarzenie_osoba(): global flaga1 - flaga1=1 + flaga1 = 1 + def losowa_osoba(): wiersz = random.randint(0, krata_magazynu.liczbaPolPionowo - 1) @@ -195,7 +195,7 @@ def main(): for i in range(LICZBA_POL_W_PIONIE): krata_magazynu.krata[i][21] = ZawartoscPola.SCIANA2 - krata_magazynu.krata[0][21]=ZawartoscPola.PUSTE + krata_magazynu.krata[0][21] = ZawartoscPola.PUSTE krata_magazynu.krata[7][21] = ZawartoscPola.PUSTE krata_magazynu.krata[14][21] = ZawartoscPola.PUSTE @@ -205,20 +205,25 @@ def main(): t = threading.Timer(5.0, zdarzenie_osoba).start() osoba = PoleKraty(krata_magazynu, 0, 0) - clf=drzewo_decyzyjne() + clf = drzewo_decyzyjne() global flaga1 flaga1 = 0 while True: # cel to Stan (pole kraty gdzie ma stać agent, aby położyć paczkę na półkę, w obiekcie klasy Miejsce jest to artybut dostęp + kierunek <-na razie niepotrzebny) if krata_magazynu.agent.cel is None: - nadaj_cel_agentowi(krata_magazynu.agent) + cel = ustawienie() + www = cel.poleStartoweGorne.wiersz + rrr = cel.poleStartoweGorne.kolumna + list = [] + list.append((www, rrr)) + nadaj_cel_agentowi(krata_magazynu.agent, cel) krata_magazynu.agent.idzDoCelu() - cel_wroc(krata_magazynu.agent) + # powrot + cel = wroc() + nadaj_cel_agentowi(krata_magazynu.agent, cel) krata_magazynu.agent.idzDoCelu() - - if flaga1 == 1: osoba.krata.krata[osoba.wiersz][osoba.kolumna] = ZawartoscPola.PUSTE okno1.wyswietlOkno() diff --git a/neural_network.py b/neural_network.py index 8477cb2..dca1185 100644 --- a/neural_network.py +++ b/neural_network.py @@ -1,10 +1,10 @@ import os -import cv2 -import numpy as np -import matplotlib.pyplot as plt -import tensorflow as tf import random +import cv2 +import matplotlib.pyplot as plt +import numpy as np +import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() @@ -13,21 +13,22 @@ x_train = tf.keras.utils.normalize(x_train, axis=1) x_test = tf.keras.utils.normalize(x_test, axis=1) model = tf.keras.models.Sequential() -model.add(tf.keras.layers.Flatten(input_shape=(28,28))) +model.add(tf.keras.layers.Flatten(input_shape=(28, 28))) model.add(tf.keras.layers.Dense(128, activation='relu')) model.add(tf.keras.layers.Dense(128, activation='relu')) model.add(tf.keras.layers.Dense(10, activation='softmax')) -model.compile(optimizer ='adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy']) +model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) -model.fit(x_train, y_train, epochs = 3) +model.fit(x_train, y_train, epochs=3) model.save('handwritten.model') model = tf.keras.models.load_model('handwritten.model') -numery_paczek=[] +numery_paczek = [] + def liczby(): - digits=[] + digits = [] for i in range(0, 3): image_number = random.randint(1, 19) img = cv2.imread(f"digits/digit{image_number}.png")[:, :, 0] @@ -44,9 +45,10 @@ def liczby(): numery_paczek.append(liczba) return numery_paczek[-1] + def recognition(): try: - liczba= liczby() + liczba = liczby() except: print("Error!") ostatnia = liczba % 10 diff --git a/rescue.py b/rescue.py index 2d893fa..dfc481f 100644 --- a/rescue.py +++ b/rescue.py @@ -1,46 +1,53 @@ import random + import pandas as pd import pydotplus -from sklearn.tree import DecisionTreeClassifier -from krata import * from sklearn import metrics, tree +from sklearn.tree import DecisionTreeClassifier + +from krata import * + def drzewo_decyzyjne(): - columns = ['plec', 'wiek', 'czas_w_pom', 'temp_w_pom', 'poziom_kurzu', 'poziom_oswietlenia', 'niebezp_towary', 'decyzja'] + columns = ['plec', 'wiek', 'czas_w_pom', 'temp_w_pom', 'poziom_kurzu', 'poziom_oswietlenia', 'niebezp_towary', + 'decyzja'] df = pd.read_csv("dataset.csv", header=0, sep=";", names=columns) - kolumny_x=['plec', 'wiek', 'czas_w_pom', 'temp_w_pom', 'poziom_kurzu', 'poziom_oswietlenia', 'niebezp_towary'] + kolumny_x = ['plec', 'wiek', 'czas_w_pom', 'temp_w_pom', 'poziom_kurzu', 'poziom_oswietlenia', 'niebezp_towary'] x = df[kolumny_x] y = df.decyzja - #df.info() - #X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) + # df.info() + # X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) clf = DecisionTreeClassifier() clf = clf.fit(x, y) # print("Dokładność: ", metrics.accuracy_score(y_test, y_pred)) - # dot_data = tree.export_graphviz(clf, out_file=None, feature_names=kolumny_x, class_names=['0', '1']) - # graph = pydotplus.graph_from_dot_data(dot_data) - #graph.write_png('drzewo.png') + # dot_data = tree.export_graphviz(clf, out_file=None, feature_names=kolumny_x, class_names=['0', '1']) + # graph = pydotplus.graph_from_dot_data(dot_data) + # graph.write_png('drzewo.png') return clf + def decyzja_osoba(osoba: PoleKraty, clf: DecisionTreeClassifier): - z=[] - z.extend(random.choices([1,2], weights=[1,2], k=1)) #1 kobieta, 2 mężczyzna - z.append(random.randint(18, 75)) #od 55 osoba starsza - z.append(random.randint(1, 60)) # jak długo przebywa w pomieszczeniu, od 40 min długo, od 20 min średnio, do 20 min krótko + z = [] + z.extend(random.choices([1, 2], weights=[1, 2], k=1)) # 1 kobieta, 2 mężczyzna + z.append(random.randint(18, 75)) # od 55 osoba starsza + z.append(random.randint(1, + 60)) # jak długo przebywa w pomieszczeniu, od 40 min długo, od 20 min średnio, do 20 min krótko if osoba.kolumna > 21: z.append(0) # zimne pomieszczenie else: z.append(1) # normalne pomieszczenie - z.append(random.randint(20, 100)) # poziom kurzu - z.append(random.randint(20, 100)) # poziom oświetlenia - if (0<=osoba.wiersz or osoba.wiersz<=13) and (17<=osoba.kolumna or osoba.kolumna<=19): #obok szafki z niebezpiecznymi towarami + z.append(random.randint(20, 100)) # poziom kurzu + z.append(random.randint(20, 100)) # poziom oświetlenia + if (0 <= osoba.wiersz or osoba.wiersz <= 13) and ( + 17 <= osoba.kolumna or osoba.kolumna <= 19): # obok szafki z niebezpiecznymi towarami z.append(1) else: z.append(0) columns = ['plec', 'wiek', 'czas_w_pom', 'temp_w_pom', 'poziom_kurzu', 'poziom_oswietlenia', 'niebezp_towary'] - z1 = pd.DataFrame([z],columns=columns) + z1 = pd.DataFrame([z], columns=columns) z_pred = clf.predict(z1) - #print(z) - #print(z_pred) - return (z_pred) \ No newline at end of file + # print(z) + # print(z_pred) + return (z_pred) diff --git a/stale.py b/stale.py index 5398428..ae00342 100644 --- a/stale.py +++ b/stale.py @@ -1,4 +1,5 @@ import os + import pygame FPS = 20 @@ -26,12 +27,12 @@ CZARNY = (0, 0, 0) CIEMNY_BRAZOWY1 = (60, 19, 33) ZOLTY1 = (231, 213, 69) NIEBIESKI1 = (65, 125, 225) -IKONA=pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'osoba2.png')), - (BOK_AGENTA1, BOK_AGENTA1)) -KALUZA=pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'kaluza.png')), - (BOK_AGENTA1, BOK_AGENTA1)) -DYWAN=pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'dywan.png')), - (BOK_AGENTA1, BOK_AGENTA1)) +IKONA = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'osoba2.png')), + (BOK_AGENTA1, BOK_AGENTA1)) +KALUZA = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'kaluza.png')), + (BOK_AGENTA1, BOK_AGENTA1)) +DYWAN = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'dywan.png')), + (BOK_AGENTA1, BOK_AGENTA1)) ### ### diff --git a/stan_nastepnik.py b/stan_nastepnik.py index 8ab3308..fea3a0f 100644 --- a/stan_nastepnik.py +++ b/stan_nastepnik.py @@ -70,7 +70,8 @@ def pole_w_granicach_kraty(pole: PoleKraty): def mozna_wjechac_na_pole(pole: PoleKraty): - if pole.krata.krata[pole.wiersz][pole.kolumna] != ZawartoscPola.SCIANA and pole.krata.krata[pole.wiersz][pole.kolumna] != ZawartoscPola.SCIANA2 and pole.krata.krata[pole.wiersz][pole.kolumna] != ZawartoscPola.OSOBA: + if pole.krata.krata[pole.wiersz][pole.kolumna] != ZawartoscPola.SCIANA and pole.krata.krata[pole.wiersz][ + pole.kolumna] != ZawartoscPola.SCIANA2 and pole.krata.krata[pole.wiersz][pole.kolumna] != ZawartoscPola.OSOBA: return True else: return False diff --git a/szafka2.py b/szafka2.py index 99b6ced..80e1f93 100644 --- a/szafka2.py +++ b/szafka2.py @@ -35,7 +35,3 @@ class Szafka: self.listaWolnychMiejsc[0].numerUmieszczonejPaczki = numerPaczki self.listaWolnychMiejsc[0].status = "zajęte" self.listaWolnychMiejsc.pop(0) - - - -