bfs
This commit is contained in:
parent
e4a0f19301
commit
715cccfb38
@ -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.9 (Sztuczna_Inteligencja_Gr1627_03dodaje)" jdkType="Python SDK" />
|
<orderEntry type="jdk" jdkName="Python 3.9 (Sztuczna_Inteligencja_Gr16_0304)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -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.9 (Sztuczna_Inteligencja_Gr1627_03dodaje)" project-jdk-type="Python SDK" />
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (Sztuczna_Inteligencja_Gr16_0304)" project-jdk-type="Python SDK" />
|
||||||
</project>
|
</project>
|
65
agent.py
65
agent.py
@ -124,17 +124,62 @@ class Agent:
|
|||||||
def idzWPrawo(self):
|
def idzWPrawo(self):
|
||||||
self.poleStartoweGorne.kolumna += 1
|
self.poleStartoweGorne.kolumna += 1
|
||||||
|
|
||||||
def bfs(graph, start, cel):
|
#def bfs(self, start:PoleKraty, cel:PoleKraty):
|
||||||
sciezka = [start]
|
# sciezka = [start]
|
||||||
wierzcholek_sciezka = [start, sciezka]
|
# wierzcholek_sciezka = [start, sciezka]
|
||||||
|
# bfs_kolejka = [wierzcholek_sciezka]
|
||||||
|
# odwiedzone = set()
|
||||||
|
# while bfs_kolejka:
|
||||||
|
# aktualne, sciezka = bfs_kolejka.pop(0)
|
||||||
|
# odwiedzone.add(aktualne)
|
||||||
|
# for neighbor in graph[aktualne]:
|
||||||
|
# if neighbor not in odwiedzone:
|
||||||
|
# if neighbor is cel:
|
||||||
|
# return sciezka + [neighbor]
|
||||||
|
# else:
|
||||||
|
# bfs_kolejka.append([neighbor, sciezka + [neighbor]])
|
||||||
|
def bfs2(self, start: PoleKraty, cel: PoleKraty):
|
||||||
|
#sciezka = []
|
||||||
|
wierzcholek_sciezka = [["start",start], [["start",start]]]
|
||||||
bfs_kolejka = [wierzcholek_sciezka]
|
bfs_kolejka = [wierzcholek_sciezka]
|
||||||
odwiedzone = set()
|
odwiedzone = set()
|
||||||
while bfs_kolejka:
|
while bfs_kolejka:
|
||||||
aktualne, sciezka = bfs_kolejka.pop(0)
|
#sciezka = []
|
||||||
odwiedzone.add(aktualne)
|
elem=bfs_kolejka.pop(0)
|
||||||
for neighbor in graph[aktualne]:
|
odwA=str(elem[0][1].wiersz)+"/"+str(elem[0][1].kolumna)
|
||||||
if neighbor not in odwiedzone:
|
odwiedzone.add(odwA)
|
||||||
if neighbor is cel:
|
polaObok=self.succ(elem[0][1])
|
||||||
return sciezka + [neighbor]
|
for neighbor in polaObok:
|
||||||
|
sciezka=elem[1].copy()
|
||||||
|
sprOdw=str(neighbor[1].wiersz)+"/"+str(neighbor[1].kolumna)
|
||||||
|
if sprOdw not in odwiedzone:
|
||||||
|
if neighbor[1].wiersz==cel.wiersz and neighbor[1].kolumna==cel.kolumna:
|
||||||
|
sciezka.append(neighbor)
|
||||||
|
return sciezka
|
||||||
else:
|
else:
|
||||||
bfs_kolejka.append([neighbor, sciezka + [neighbor]])
|
sciezka.append([neighbor])
|
||||||
|
bfs_kolejka.append([neighbor, sciezka])
|
||||||
|
|
||||||
|
def succ(self, poleKraty: PoleKraty):
|
||||||
|
polaDostepneObok=list()
|
||||||
|
if poleKraty.kolumna-1>=0: #nie poza kratę
|
||||||
|
if self.krata.krata[poleKraty.wiersz][poleKraty.kolumna-1]!=ZawartoscPola.SCIANA: #nie szafka (szafka to ściana)
|
||||||
|
poleLewe=PoleKraty(self.krata, poleKraty.wiersz, poleKraty.kolumna-1)
|
||||||
|
naLewo=["Kierunek.LEWO", poleLewe]
|
||||||
|
polaDostepneObok.append(naLewo)
|
||||||
|
if poleKraty.wiersz - 1>= 0: # nie poza kratę
|
||||||
|
if self.krata.krata[poleKraty.wiersz-1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
|
||||||
|
poleGorne = PoleKraty(self.krata, poleKraty.wiersz-1, poleKraty.kolumna)
|
||||||
|
naGore = ["Kierunek.GORA", poleGorne]
|
||||||
|
polaDostepneObok.append(naGore)
|
||||||
|
if poleKraty.kolumna+1<LICZBA_POL_W_POZIOMIE: #nie poza kratę
|
||||||
|
if self.krata.krata[poleKraty.wiersz][poleKraty.kolumna+1]!=ZawartoscPola.SCIANA:
|
||||||
|
polePrawe=PoleKraty(self.krata, poleKraty.wiersz, poleKraty.kolumna+1)
|
||||||
|
naPrawo = ["Kierunek.PRAWO", polePrawe]
|
||||||
|
polaDostepneObok.append(naPrawo)
|
||||||
|
if poleKraty.wiersz+1<LICZBA_POL_W_PIONIE: # nie poza kratę
|
||||||
|
if self.krata.krata[poleKraty.wiersz+1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
|
||||||
|
poleDolne = PoleKraty(self.krata, poleKraty.wiersz+1, poleKraty.kolumna)
|
||||||
|
naDol = ["Kierunek.DOL", poleDolne]
|
||||||
|
polaDostepneObok.append(naDol)
|
||||||
|
return polaDostepneObok
|
45
bfs.py
Normal file
45
bfs.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
from krata import *
|
||||||
|
|
||||||
|
def bfs(Krata: Krata, start: PoleKraty, cel: PoleKraty):
|
||||||
|
wierzcholek_sciezka = [["start", start], [["start", start]]]
|
||||||
|
bfs_kolejka = [wierzcholek_sciezka]
|
||||||
|
odwiedzone = set()
|
||||||
|
while bfs_kolejka:
|
||||||
|
elem = bfs_kolejka.pop(0)
|
||||||
|
odwNowe = str(elem[0][1].wiersz) + "/" + str(elem[0][1].kolumna)
|
||||||
|
odwiedzone.add(odwNowe)
|
||||||
|
polaObok = succ(Krata,elem[0][1])
|
||||||
|
for neighbor in polaObok:
|
||||||
|
sciezka = elem[1].copy()
|
||||||
|
sprOdw = str(neighbor[1].wiersz) + "/" + str(neighbor[1].kolumna)
|
||||||
|
if sprOdw not in odwiedzone:
|
||||||
|
if neighbor[1].wiersz == cel.wiersz and neighbor[1].kolumna == cel.kolumna:
|
||||||
|
sciezka.append(neighbor)
|
||||||
|
return sciezka
|
||||||
|
else:
|
||||||
|
sciezka.append([neighbor])
|
||||||
|
bfs_kolejka.append([neighbor, sciezka])
|
||||||
|
|
||||||
|
def succ(Krata: Krata, poleKraty: PoleKraty):
|
||||||
|
polaDostepneObok = list()
|
||||||
|
if poleKraty.kolumna - 1 >= 0: # nie poza kratę
|
||||||
|
if Krata.krata[poleKraty.wiersz][poleKraty.kolumna - 1] != ZawartoscPola.SCIANA: # nie szafka (szafka to ściana)
|
||||||
|
poleLewe = PoleKraty(Krata, poleKraty.wiersz, poleKraty.kolumna - 1)
|
||||||
|
naLewo = ["Kierunek.LEWO", poleLewe]
|
||||||
|
polaDostepneObok.append(naLewo)
|
||||||
|
if poleKraty.wiersz - 1 >= 0: # nie poza kratę
|
||||||
|
if Krata.krata[poleKraty.wiersz - 1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
|
||||||
|
poleGorne = PoleKraty(Krata, poleKraty.wiersz - 1, poleKraty.kolumna)
|
||||||
|
naGore = ["Kierunek.GORA", poleGorne]
|
||||||
|
polaDostepneObok.append(naGore)
|
||||||
|
if poleKraty.kolumna + 1 < LICZBA_POL_W_POZIOMIE: # nie poza kratę
|
||||||
|
if Krata.krata[poleKraty.wiersz][poleKraty.kolumna + 1] != ZawartoscPola.SCIANA:
|
||||||
|
polePrawe = PoleKraty(Krata, poleKraty.wiersz, poleKraty.kolumna + 1)
|
||||||
|
naPrawo = ["Kierunek.PRAWO", polePrawe]
|
||||||
|
polaDostepneObok.append(naPrawo)
|
||||||
|
if poleKraty.wiersz + 1 < LICZBA_POL_W_PIONIE: # nie poza kratę
|
||||||
|
if Krata.krata[poleKraty.wiersz + 1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
|
||||||
|
poleDolne = PoleKraty(Krata, poleKraty.wiersz + 1, poleKraty.kolumna)
|
||||||
|
naDol = ["Kierunek.DOL", poleDolne]
|
||||||
|
polaDostepneObok.append(naDol)
|
||||||
|
return polaDostepneObok
|
59
bfs_z_agenta.txt
Normal file
59
bfs_z_agenta.txt
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#def bfs(self, start:PoleKraty, cel:PoleKraty):
|
||||||
|
# sciezka = [start]
|
||||||
|
# wierzcholek_sciezka = [start, sciezka]
|
||||||
|
# bfs_kolejka = [wierzcholek_sciezka]
|
||||||
|
# odwiedzone = set()
|
||||||
|
# while bfs_kolejka:
|
||||||
|
# aktualne, sciezka = bfs_kolejka.pop(0)
|
||||||
|
# odwiedzone.add(aktualne)
|
||||||
|
# for neighbor in graph[aktualne]:
|
||||||
|
# if neighbor not in odwiedzone:
|
||||||
|
# if neighbor is cel:
|
||||||
|
# return sciezka + [neighbor]
|
||||||
|
# else:
|
||||||
|
# bfs_kolejka.append([neighbor, sciezka + [neighbor]])
|
||||||
|
def bfs(self, start: PoleKraty, cel: PoleKraty):
|
||||||
|
#sciezka = []
|
||||||
|
wierzcholek_sciezka = [["start",start], [["start",start]]]
|
||||||
|
bfs_kolejka = [wierzcholek_sciezka]
|
||||||
|
odwiedzone = set()
|
||||||
|
while bfs_kolejka:
|
||||||
|
#sciezka = []
|
||||||
|
elem=bfs_kolejka.pop(0)
|
||||||
|
odwA=str(elem[0][1].wiersz)+"/"+str(elem[0][1].kolumna)
|
||||||
|
odwiedzone.add(odwA)
|
||||||
|
polaObok=self.succ(elem[0][1])
|
||||||
|
for neighbor in polaObok:
|
||||||
|
sciezka=elem[1].copy()
|
||||||
|
sprOdw=str(neighbor[1].wiersz)+"/"+str(neighbor[1].kolumna)
|
||||||
|
if sprOdw not in odwiedzone:
|
||||||
|
if neighbor[1].wiersz==cel.wiersz and neighbor[1].kolumna==cel.kolumna:
|
||||||
|
sciezka.append(neighbor)
|
||||||
|
return sciezka
|
||||||
|
else:
|
||||||
|
sciezka.append([neighbor])
|
||||||
|
bfs_kolejka.append([neighbor, sciezka])
|
||||||
|
|
||||||
|
def succ(self, poleKraty: PoleKraty):
|
||||||
|
polaDostepneObok=list()
|
||||||
|
if poleKraty.kolumna-1>=0: #nie poza kratę
|
||||||
|
if self.krata.krata[poleKraty.wiersz][poleKraty.kolumna-1]!=ZawartoscPola.SCIANA: #nie szafka (szafka to ściana)
|
||||||
|
poleLewe=PoleKraty(self.krata, poleKraty.wiersz, poleKraty.kolumna-1)
|
||||||
|
naLewo=["Kierunek.LEWO", poleLewe]
|
||||||
|
polaDostepneObok.append(naLewo)
|
||||||
|
if poleKraty.wiersz - 1>= 0: # nie poza kratę
|
||||||
|
if self.krata.krata[poleKraty.wiersz-1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
|
||||||
|
poleGorne = PoleKraty(self.krata, poleKraty.wiersz-1, poleKraty.kolumna)
|
||||||
|
naGore = ["Kierunek.GORA", poleGorne]
|
||||||
|
polaDostepneObok.append(naGore)
|
||||||
|
if poleKraty.kolumna+1<LICZBA_POL_W_POZIOMIE: #nie poza kratę
|
||||||
|
if self.krata.krata[poleKraty.wiersz][poleKraty.kolumna+1]!=ZawartoscPola.SCIANA:
|
||||||
|
polePrawe=PoleKraty(self.krata, poleKraty.wiersz, poleKraty.kolumna+1)
|
||||||
|
naPrawo = ["Kierunek.PRAWO", polePrawe]
|
||||||
|
polaDostepneObok.append(naPrawo)
|
||||||
|
if poleKraty.wiersz+1<LICZBA_POL_W_PIONIE: # nie poza kratę
|
||||||
|
if self.krata.krata[poleKraty.wiersz+1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
|
||||||
|
poleDolne = PoleKraty(self.krata, poleKraty.wiersz+1, poleKraty.kolumna)
|
||||||
|
naDol = ["Kierunek.DOL", poleDolne]
|
||||||
|
polaDostepneObok.append(naDol)
|
||||||
|
return polaDostepneObok
|
5
krata.py
5
krata.py
@ -94,3 +94,8 @@ class Krata:
|
|||||||
if self.agent is not None:
|
if self.agent is not None:
|
||||||
self.okno.blit(self.agent.tekstura, (self.agent.hitbox.x, self.agent.hitbox.y))
|
self.okno.blit(self.agent.tekstura, (self.agent.hitbox.x, self.agent.hitbox.y))
|
||||||
self.agent.ruszSie()
|
self.agent.ruszSie()
|
||||||
|
|
||||||
|
def bfsA(self, start: PoleKraty, cel: PoleKraty):
|
||||||
|
if self.agent is not None:
|
||||||
|
odp= self.agent.bfs(start,cel)
|
||||||
|
return odp
|
30
main.py
30
main.py
@ -3,17 +3,17 @@ import ctypes
|
|||||||
|
|
||||||
from agent import *
|
from agent import *
|
||||||
from ramy_czyli_wiedza_agenta import *
|
from ramy_czyli_wiedza_agenta import *
|
||||||
|
from bfs import *
|
||||||
|
|
||||||
#aby działalo w oknie + rozdzielczość ekranu
|
#aby działalo w oknie + rozdzielczość ekranu
|
||||||
ctypes.windll.shcore.SetProcessDpiAwareness(1)
|
#ctypes.windll.shcore.SetProcessDpiAwareness(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA))
|
Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA))
|
||||||
pygame.display.set_caption("Okno1")
|
pygame.display.set_caption("Okno1")
|
||||||
Krata = Krata(Okno)
|
Krata = Krata(Okno)
|
||||||
Pomieszczenie=Pomieszczenie(0,0)
|
Pomieszczenie=Pomieszczenie(0,0)
|
||||||
|
|
||||||
|
|
||||||
def dodaj_agenta():
|
def dodaj_agenta():
|
||||||
# pole_lewe_gorne = PoleKraty(Krata, random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH),
|
# pole_lewe_gorne = PoleKraty(Krata, random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH),
|
||||||
# random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH))
|
# random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH))
|
||||||
@ -29,15 +29,22 @@ def dodaj_szafke(numerSzafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, po
|
|||||||
Pomieszczenie.dodajSzafke(szafka)
|
Pomieszczenie.dodajSzafke(szafka)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
dodaj_szafke("A", 2, 10, "L", 0, 20) #przykładowe wartości dla szafek
|
dodaj_szafke("A", 2, 7, "P", 0, 0)
|
||||||
dodaj_szafke("B", 2, 10, "P", 0, 24)
|
dodaj_szafke("B", 2, 7, "L", 0, 3)
|
||||||
dodaj_szafke("C", 2, 10, "L", 0, 40)
|
dodaj_szafke("C", 2, 7, "P", 0, 4)
|
||||||
dodaj_szafke("D", 2, 10, "P", 0, 44)
|
dodaj_szafke("D", 2, 7, "L", 0, 7)
|
||||||
dodaj_szafke("E", 2, 10, "L", 0, 60)
|
dodaj_szafke("E", 2, 7, "P", 0, 8)
|
||||||
dodaj_szafke("F", 2, 10, "P", 0, 64)
|
dodaj_szafke("F", 2, 7, "L", 0, 11)
|
||||||
dodaj_szafke("G", 2, 10, "L", 0, 80)
|
dodaj_szafke("G", 2, 7, "P", 0, 12)
|
||||||
dodaj_szafke("H", 2, 10, "P", 0, 84)
|
dodaj_szafke("H", 2, 7, "L", 0, 15)
|
||||||
|
dodaj_szafke("I", 2, 7, "P", 0, 16)
|
||||||
|
dodaj_szafke("J", 2, 7, "L", 0, 19)
|
||||||
dodaj_agenta()
|
dodaj_agenta()
|
||||||
|
cel = PoleKraty(Krata, 0, 2) #pole kraty gdzie ma stać agent, aby położyć paczkę na półkę, w obiekcie Miejsce artybut dostęp
|
||||||
|
start=PoleKraty(Krata, 11, 10) # pole startowe agenta, == pole_lewe_gorne
|
||||||
|
#bfsList= Krata.bfsA(start, cel)
|
||||||
|
bfsList=bfs(Krata,start,cel)
|
||||||
|
|
||||||
klatkaz = pygame.time.Clock()
|
klatkaz = pygame.time.Clock()
|
||||||
warunek_dzialania = True
|
warunek_dzialania = True
|
||||||
while warunek_dzialania:
|
while warunek_dzialania:
|
||||||
@ -49,5 +56,4 @@ def main():
|
|||||||
Krata.wyswietlKrate()
|
Krata.wyswietlKrate()
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
@ -86,7 +86,7 @@ class Szafka:
|
|||||||
miejsce = Miejsce(numerMiejsca,wymiar_miejsca, 0, 0)
|
miejsce = Miejsce(numerMiejsca,wymiar_miejsca, 0, 0)
|
||||||
#wypełnianie pól "zajmowane miejsca" i "dostęp"
|
#wypełnianie pól "zajmowane miejsca" i "dostęp"
|
||||||
for m in range(DUZA_SZAFA): # wiersz
|
for m in range(DUZA_SZAFA): # wiersz
|
||||||
poczatek_wiersz = poczatek_wiersz1 + j * 3 + m
|
poczatek_wiersz = poczatek_wiersz1 + j * DUZA_SZAFA + m
|
||||||
for n in range(DUZA_SZAFA): # kolumna
|
for n in range(DUZA_SZAFA): # kolumna
|
||||||
Krata.krata[poczatek_wiersz][poczatek_kolumna + n] = ZawartoscPola.SCIANA
|
Krata.krata[poczatek_wiersz][poczatek_kolumna + n] = ZawartoscPola.SCIANA
|
||||||
pole = PoleKraty(Krata, poczatek_wiersz, poczatek_kolumna+n)
|
pole = PoleKraty(Krata, poczatek_wiersz, poczatek_kolumna+n)
|
||||||
|
10
stale.py
10
stale.py
@ -3,17 +3,17 @@ FPS = 5
|
|||||||
# SZEROKOSC_OKNA = 1500
|
# SZEROKOSC_OKNA = 1500
|
||||||
# WYSOKOSC_OKNA = 750
|
# WYSOKOSC_OKNA = 750
|
||||||
#
|
#
|
||||||
LICZBA_POL_W_POZIOMIE = 90
|
LICZBA_POL_W_POZIOMIE = 20
|
||||||
LICZBA_POL_W_PIONIE = 50
|
LICZBA_POL_W_PIONIE = 12
|
||||||
BOK_POLA = 15
|
BOK_POLA = 45
|
||||||
ODSTEP_MIEDZY_POLAMI = 1
|
ODSTEP_MIEDZY_POLAMI = 1
|
||||||
SZEROKOSC_OKNA = LICZBA_POL_W_POZIOMIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI
|
SZEROKOSC_OKNA = LICZBA_POL_W_POZIOMIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI
|
||||||
WYSOKOSC_OKNA = LICZBA_POL_W_PIONIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI
|
WYSOKOSC_OKNA = LICZBA_POL_W_PIONIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI
|
||||||
#
|
#
|
||||||
BOK_AGENTA1_W_POLACH = 3
|
BOK_AGENTA1_W_POLACH = 1
|
||||||
BOK_AGENTA1 = BOK_AGENTA1_W_POLACH * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) - ODSTEP_MIEDZY_POLAMI
|
BOK_AGENTA1 = BOK_AGENTA1_W_POLACH * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) - ODSTEP_MIEDZY_POLAMI
|
||||||
#
|
#
|
||||||
DUZA_SZAFA=3
|
DUZA_SZAFA=1
|
||||||
#
|
#
|
||||||
BIALY = (255, 255, 255)
|
BIALY = (255, 255, 255)
|
||||||
JASNOSZARY1 = (200, 200, 200)
|
JASNOSZARY1 = (200, 200, 200)
|
||||||
|
Loading…
Reference in New Issue
Block a user