zmiana nadaj_cel_agentowi(); ustawienie(); wroc()

This commit is contained in:
Dominik Jagosz 2022-06-08 09:56:20 +02:00
parent dc9cfef284
commit d15203280d
9 changed files with 111 additions and 99 deletions

View File

@ -4,7 +4,7 @@
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" /> <excludeFolder url="file://$MODULE_DIR$/venv" />
</content> </content>
<orderEntry type="jdk" jdkName="Python 3.8 (Sztuczna_Inteligencja_Gr16)" jdkType="Python SDK" /> <orderEntry type="jdk" jdkName="Python 3.9 (Sztuczna_Inteligencja_Gr16)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
</module> </module>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (Sztuczna_Inteligencja_Gr16)" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (Sztuczna_Inteligencja_Gr16)" project-jdk-type="Python SDK" />
</project> </project>

View File

@ -36,8 +36,8 @@ class ZawartoscPola(Enum):
CEL = 2 CEL = 2
DYWAN = 3 DYWAN = 3
KALUZA = 4 KALUZA = 4
SCIANA2=5 SCIANA2 = 5
OSOBA=6 OSOBA = 6
ZawartoscPolaNaKolorPola = { ZawartoscPolaNaKolorPola = {

113
main.py
View File

@ -1,16 +1,17 @@
import ctypes import ctypes
import os import os
import random
import threading import threading
import pygame.transform import pygame.transform
import szafka2 import szafka2
from agent import * from agent import *
from neural_network import *
from okno import * from okno import *
from ramy_czyli_wiedza_agenta import * from ramy_czyli_wiedza_agenta import *
from rescue import * from rescue import *
from neural_network import *
import random
# aby działalo w oknie + rozdzielczość ekranu # aby działalo w oknie + rozdzielczość ekranu
# ctypes.windll.shcore.SetProcessDpiAwareness(1) # ctypes.windll.shcore.SetProcessDpiAwareness(1)
@ -39,80 +40,81 @@ def dodaj_szafke(numerSzafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, po
poczatek_kolumna, krata_magazynu) poczatek_kolumna, krata_magazynu)
Pomieszczenie.dodajSzafke(szafka) Pomieszczenie.dodajSzafke(szafka)
def gdzie_paczka(numerSzafki): def gdzie_paczka(numerSzafki):
global kolumna, wiersz global kolumna, wiersz
if numerSzafki == 1: if numerSzafki == 1:
kolumna =random.randint(1,2) kolumna = random.randint(1, 2)
if kolumna ==1: if kolumna == 1:
wiersz = random.randint(2,13) wiersz = random.randint(2, 13)
else: else:
wiersz = random.choice([1,14]) wiersz = random.choice([1, 14])
if numerSzafki == 2: if numerSzafki == 2:
kolumna = random.randint(3,4) kolumna = random.randint(3, 4)
if kolumna == 3: if kolumna == 3:
wiersz = random.choice([1, 14]) wiersz = random.choice([1, 14])
else: else:
wiersz = random.randint(2, 13) wiersz = random.randint(2, 13)
if numerSzafki == 3: if numerSzafki == 3:
kolumna = random.randint(5,8) kolumna = random.randint(5, 8)
if kolumna == 5: if kolumna == 5:
wiersz = random.randint(1,5) wiersz = random.randint(1, 5)
if kolumna == 6: if kolumna == 6:
wiersz = random.choice([0,6]) wiersz = random.choice([0, 6])
if kolumna == 7: if kolumna == 7:
wiersz = random.choice([0,7]) wiersz = random.choice([0, 7])
if kolumna == 8: if kolumna == 8:
wiersz= random.randint(1,6) wiersz = random.randint(1, 6)
if numerSzafki == 4: if numerSzafki == 4:
kolumna = random.randint(5,8) kolumna = random.randint(5, 8)
if kolumna == 5: if kolumna == 5:
wiersz = random.randint(9,12) wiersz = random.randint(9, 12)
if kolumna==6: if kolumna == 6:
wiersz = random.choice([8,13]) wiersz = random.choice([8, 13])
if kolumna ==7: if kolumna == 7:
wiersz = random.choice([9,13]) wiersz = random.choice([9, 13])
if kolumna==8: if kolumna == 8:
wiersz = random.randint(10,12) wiersz = random.randint(10, 12)
if numerSzafki == 5: if numerSzafki == 5:
kolumna = random.randint(10,12) kolumna = random.randint(10, 12)
if kolumna == 11: if kolumna == 11:
wiersz = random.choice([2,11]) wiersz = random.choice([2, 11])
else: else:
wiersz = random.randint(3,10) wiersz = random.randint(3, 10)
if numerSzafki == 6: if numerSzafki == 6:
kolumna = random.randint(12,14) kolumna = random.randint(12, 14)
if kolumna == 13: if kolumna == 13:
wiersz = random.choice([1,12]) wiersz = random.choice([1, 12])
else: else:
wiersz = random.randint(2,11) wiersz = random.randint(2, 11)
if numerSzafki == 7: if numerSzafki == 7:
kolumna = random.randint(17,19) kolumna = random.randint(17, 19)
if kolumna == 18: if kolumna == 18:
wiersz = random.choice([0,13]) wiersz = random.choice([0, 13])
else: else:
wiersz =random.randint(1,12) wiersz = random.randint(1, 12)
if numerSzafki == 8: if numerSzafki == 8:
kolumna = random.randint(22,24) kolumna = random.randint(22, 24)
if kolumna == 23: if kolumna == 23:
wiersz =random.choice([4,12]) wiersz = random.choice([4, 12])
else: else:
wiersz =random.randint(5,11) wiersz = random.randint(5, 11)
if numerSzafki == 9: if numerSzafki == 9:
kolumna = random.randint(24,26) kolumna = random.randint(24, 26)
if kolumna == 25: if kolumna == 25:
wiersz =random.choice([0,13]) wiersz = random.choice([0, 13])
else: else:
wiersz =random.randint(1,12) wiersz = random.randint(1, 12)
if numerSzafki == 10: if numerSzafki == 10:
kolumna =random.randint(27,29) kolumna = random.randint(27, 29)
if kolumna == 28: if kolumna == 28:
wiersz = random.choice([4,14]) wiersz = random.choice([4, 14])
else: else:
wiersz = random.randint(5, 13) wiersz = random.randint(5, 13)
if numerSzafki == 11: if numerSzafki == 11:
kolumna=0 kolumna = 0
wiersz=0 wiersz = 0
print(wiersz,kolumna) print(wiersz, kolumna)
return wiersz, kolumna return wiersz, kolumna
@ -120,7 +122,7 @@ def ustawienie():
ostatnia = recognition() ostatnia = recognition()
print(ostatnia) print(ostatnia)
kierunek = Kierunek(random.randint(0, 3)) 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)) 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 krata_magazynu.krata[wiersz][kolumna] = ZawartoscPola.CEL
def nadaj_cel_agentowi(agent: Agent): def nadaj_cel_agentowi(agent: Agent, cel: Cel):
agent.cel = ustawienie() agent.cel = cel
zaznacz_cel_na_mapie(agent.cel) zaznacz_cel_na_mapie(agent.cel)
print("CEL:", agent.cel.poleStartoweGorne.wiersz, agent.cel.poleStartoweGorne.kolumna) 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(): def zdarzenie_osoba():
global flaga1 global flaga1
flaga1=1 flaga1 = 1
def losowa_osoba(): def losowa_osoba():
wiersz = random.randint(0, krata_magazynu.liczbaPolPionowo - 1) wiersz = random.randint(0, krata_magazynu.liczbaPolPionowo - 1)
@ -195,7 +195,7 @@ def main():
for i in range(LICZBA_POL_W_PIONIE): for i in range(LICZBA_POL_W_PIONIE):
krata_magazynu.krata[i][21] = ZawartoscPola.SCIANA2 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[7][21] = ZawartoscPola.PUSTE
krata_magazynu.krata[14][21] = ZawartoscPola.PUSTE krata_magazynu.krata[14][21] = ZawartoscPola.PUSTE
@ -205,20 +205,25 @@ def main():
t = threading.Timer(5.0, zdarzenie_osoba).start() t = threading.Timer(5.0, zdarzenie_osoba).start()
osoba = PoleKraty(krata_magazynu, 0, 0) osoba = PoleKraty(krata_magazynu, 0, 0)
clf=drzewo_decyzyjne() clf = drzewo_decyzyjne()
global flaga1 global flaga1
flaga1 = 0 flaga1 = 0
while True: 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) # 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: 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() krata_magazynu.agent.idzDoCelu()
cel_wroc(krata_magazynu.agent) # powrot
cel = wroc()
nadaj_cel_agentowi(krata_magazynu.agent, cel)
krata_magazynu.agent.idzDoCelu() krata_magazynu.agent.idzDoCelu()
if flaga1 == 1: if flaga1 == 1:
osoba.krata.krata[osoba.wiersz][osoba.kolumna] = ZawartoscPola.PUSTE osoba.krata.krata[osoba.wiersz][osoba.kolumna] = ZawartoscPola.PUSTE
okno1.wyswietlOkno() okno1.wyswietlOkno()

View File

@ -1,10 +1,10 @@
import os import os
import cv2
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import random import random
import cv2
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
mnist = tf.keras.datasets.mnist mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data() (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) x_test = tf.keras.utils.normalize(x_test, axis=1)
model = tf.keras.models.Sequential() 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(128, activation='relu')) model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax')) 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.save('handwritten.model')
model = tf.keras.models.load_model('handwritten.model') model = tf.keras.models.load_model('handwritten.model')
numery_paczek=[] numery_paczek = []
def liczby(): def liczby():
digits=[] digits = []
for i in range(0, 3): for i in range(0, 3):
image_number = random.randint(1, 19) image_number = random.randint(1, 19)
img = cv2.imread(f"digits/digit{image_number}.png")[:, :, 0] img = cv2.imread(f"digits/digit{image_number}.png")[:, :, 0]
@ -44,9 +45,10 @@ def liczby():
numery_paczek.append(liczba) numery_paczek.append(liczba)
return numery_paczek[-1] return numery_paczek[-1]
def recognition(): def recognition():
try: try:
liczba= liczby() liczba = liczby()
except: except:
print("Error!") print("Error!")
ostatnia = liczba % 10 ostatnia = liczba % 10

View File

@ -1,46 +1,53 @@
import random import random
import pandas as pd import pandas as pd
import pydotplus import pydotplus
from sklearn.tree import DecisionTreeClassifier
from krata import *
from sklearn import metrics, tree from sklearn import metrics, tree
from sklearn.tree import DecisionTreeClassifier
from krata import *
def drzewo_decyzyjne(): 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) 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] x = df[kolumny_x]
y = df.decyzja y = df.decyzja
#df.info() # df.info()
#X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
clf = DecisionTreeClassifier() clf = DecisionTreeClassifier()
clf = clf.fit(x, y) clf = clf.fit(x, y)
# print("Dokładność: ", metrics.accuracy_score(y_test, y_pred)) # 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']) # 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 = pydotplus.graph_from_dot_data(dot_data)
#graph.write_png('drzewo.png') # graph.write_png('drzewo.png')
return clf return clf
def decyzja_osoba(osoba: PoleKraty, clf: DecisionTreeClassifier): def decyzja_osoba(osoba: PoleKraty, clf: DecisionTreeClassifier):
z=[] z = []
z.extend(random.choices([1,2], weights=[1,2], k=1)) #1 kobieta, 2 mężczyzna 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(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.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: if osoba.kolumna > 21:
z.append(0) # zimne pomieszczenie z.append(0) # zimne pomieszczenie
else: else:
z.append(1) # normalne pomieszczenie z.append(1) # normalne pomieszczenie
z.append(random.randint(20, 100)) # poziom kurzu z.append(random.randint(20, 100)) # poziom kurzu
z.append(random.randint(20, 100)) # poziom oświetlenia 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 if (0 <= osoba.wiersz or osoba.wiersz <= 13) and (
17 <= osoba.kolumna or osoba.kolumna <= 19): # obok szafki z niebezpiecznymi towarami
z.append(1) z.append(1)
else: else:
z.append(0) z.append(0)
columns = ['plec', 'wiek', 'czas_w_pom', 'temp_w_pom', 'poziom_kurzu', 'poziom_oswietlenia', 'niebezp_towary'] 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) z_pred = clf.predict(z1)
#print(z) # print(z)
#print(z_pred) # print(z_pred)
return (z_pred) return (z_pred)

View File

@ -1,4 +1,5 @@
import os import os
import pygame import pygame
FPS = 20 FPS = 20
@ -26,12 +27,12 @@ CZARNY = (0, 0, 0)
CIEMNY_BRAZOWY1 = (60, 19, 33) CIEMNY_BRAZOWY1 = (60, 19, 33)
ZOLTY1 = (231, 213, 69) ZOLTY1 = (231, 213, 69)
NIEBIESKI1 = (65, 125, 225) NIEBIESKI1 = (65, 125, 225)
IKONA=pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'osoba2.png')), IKONA = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'osoba2.png')),
(BOK_AGENTA1, BOK_AGENTA1)) (BOK_AGENTA1, BOK_AGENTA1))
KALUZA=pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'kaluza.png')), KALUZA = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'kaluza.png')),
(BOK_AGENTA1, BOK_AGENTA1)) (BOK_AGENTA1, BOK_AGENTA1))
DYWAN=pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'dywan.png')), DYWAN = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'dywan.png')),
(BOK_AGENTA1, BOK_AGENTA1)) (BOK_AGENTA1, BOK_AGENTA1))
### ###
### ###

View File

@ -70,7 +70,8 @@ def pole_w_granicach_kraty(pole: PoleKraty):
def mozna_wjechac_na_pole(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 return True
else: else:
return False return False

View File

@ -35,7 +35,3 @@ class Szafka:
self.listaWolnychMiejsc[0].numerUmieszczonejPaczki = numerPaczki self.listaWolnychMiejsc[0].numerUmieszczonejPaczki = numerPaczki
self.listaWolnychMiejsc[0].status = "zajęte" self.listaWolnychMiejsc[0].status = "zajęte"
self.listaWolnychMiejsc.pop(0) self.listaWolnychMiejsc.pop(0)