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$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</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" />
</component>
</module>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<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>

View File

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

111
main.py
View File

@ -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])
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()

View File

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

View File

@ -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')
# 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
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)
# print(z)
# print(z_pred)
return (z_pred)

View File

@ -1,4 +1,5 @@
import os
import pygame
FPS = 20
@ -26,11 +27,11 @@ 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')),
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')),
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')),
DYWAN = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', 'dywan.png')),
(BOK_AGENTA1, BOK_AGENTA1))
###

View File

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

View File

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