stworzone screeny
This commit is contained in:
parent
8d7d85fc35
commit
fc0f59ba53
19
astar.py
19
astar.py
@ -13,21 +13,20 @@ def heurystyka(obiekty, a, b):
|
|||||||
|
|
||||||
|
|
||||||
def astar(obiekty, start, cel):
|
def astar(obiekty, start, cel):
|
||||||
|
|
||||||
sasiedzi = [(0, 1), (0, -1), (1, 0), (-1, 0)]
|
sasiedzi = [(0, 1), (0, -1), (1, 0), (-1, 0)]
|
||||||
close_set = set()
|
close_set = set()
|
||||||
came_from = {}
|
came_from = {}
|
||||||
hscore = {start: heurystyka(obiekty, start, cel)}
|
hscore = {start: heurystyka(obiekty, start, cel)}
|
||||||
gscore = {start: 0}
|
gscore = {start: 0}
|
||||||
fscore = {start: heurystyka(obiekty, start, cel)}
|
fscore = {start: heurystyka(obiekty, start, cel)}
|
||||||
oheap = []
|
|
||||||
heapq.heappush(oheap, (fscore[start], start))
|
fringe = []
|
||||||
while oheap:
|
heapq.heappush(fringe, (fscore[start], start))
|
||||||
current = heapq.heappop(oheap)[1]
|
while fringe:
|
||||||
|
current = heapq.heappop(fringe)[1]
|
||||||
if current == cel:
|
if current == cel:
|
||||||
data = []
|
data = []
|
||||||
while current in came_from:
|
while current in came_from:
|
||||||
|
|
||||||
data.append(current)
|
data.append(current)
|
||||||
current = came_from[current]
|
current = came_from[current]
|
||||||
return data[::-1]
|
return data[::-1]
|
||||||
@ -41,14 +40,14 @@ def astar(obiekty, start, cel):
|
|||||||
continue
|
continue
|
||||||
elif 6 <= sasiad[0] <= 7 and 10 <= sasiad[1] <= 11:
|
elif 6 <= sasiad[0] <= 7 and 10 <= sasiad[1] <= 11:
|
||||||
continue
|
continue
|
||||||
tentative_h_score = heurystyka(obiekty, sasiad, cel) + heurystyka(obiekty, current, sasiad)
|
|
||||||
|
|
||||||
if sasiad in [i[1] for i in oheap] and tentative_h_score < hscore.get(current, 0):
|
tentative_h_score = heurystyka(obiekty, sasiad, cel) + heurystyka(obiekty, current, sasiad)
|
||||||
|
if sasiad in [i[1] for i in fringe] and tentative_h_score < hscore.get(current, 0):
|
||||||
continue
|
continue
|
||||||
elif sasiad not in close_set and sasiad not in [i[1] for i in oheap]:
|
elif sasiad not in close_set and sasiad not in [i[1] for i in fringe]:
|
||||||
came_from[sasiad] = current
|
came_from[sasiad] = current
|
||||||
hscore[sasiad] = tentative_h_score
|
hscore[sasiad] = tentative_h_score
|
||||||
fscore[sasiad] = tentative_h_score + gscore[current]
|
fscore[sasiad] = tentative_h_score + gscore[current]
|
||||||
gscore[sasiad] = gscore[current] + heurystyka(obiekty, current, sasiad)
|
gscore[sasiad] = gscore[current] + heurystyka(obiekty, current, sasiad)
|
||||||
heapq.heappush(oheap, (fscore[sasiad], sasiad))
|
heapq.heappush(fringe, (fscore[sasiad], sasiad))
|
||||||
return False
|
return False
|
||||||
|
15
game.py
15
game.py
@ -38,10 +38,15 @@ WINDOW_SIZE = [1300, 980]
|
|||||||
|
|
||||||
def game():
|
def game():
|
||||||
obiekty = utworzObiekty()
|
obiekty = utworzObiekty()
|
||||||
|
nieodwiedzone_domy = obiekty["wspolrzedne_domow"]
|
||||||
|
nieodwiedzone_kontenery = [(obiekty["kontener_szklo"].x, obiekty["kontener_szklo"].y),
|
||||||
|
(obiekty["kontener_papier"].x, obiekty["kontener_papier"].y),
|
||||||
|
(obiekty["kontener_metal"].x, obiekty["kontener_metal"].y),
|
||||||
|
(obiekty["kontener_plastik"].x, obiekty["kontener_plastik"].y),
|
||||||
|
(obiekty["kontener_organiczne"].x, obiekty["kontener_organiczne"].y)]
|
||||||
# Petla az uzytkownik zamknie program
|
# Petla az uzytkownik zamknie program
|
||||||
done = False
|
done = False
|
||||||
clock = pygame.time.Clock()
|
clock = pygame.time.Clock()
|
||||||
temp = True
|
|
||||||
|
|
||||||
# -------- Glowna petla programu -----------
|
# -------- Glowna petla programu -----------
|
||||||
while not done:
|
while not done:
|
||||||
@ -70,14 +75,6 @@ def game():
|
|||||||
obiekty["smieciarka"].w_dol()
|
obiekty["smieciarka"].w_dol()
|
||||||
|
|
||||||
rysowaniePlanszy(obiekty)
|
rysowaniePlanszy(obiekty)
|
||||||
while temp:
|
|
||||||
nieodwiedzone_domy = obiekty["wspolrzedne_domow"]
|
|
||||||
nieodwiedzone_kontenery = [(obiekty["kontener_szklo"].x, obiekty["kontener_szklo"].y),
|
|
||||||
(obiekty["kontener_papier"].x, obiekty["kontener_papier"].y),
|
|
||||||
(obiekty["kontener_metal"].x, obiekty["kontener_metal"].y),
|
|
||||||
(obiekty["kontener_plastik"].x, obiekty["kontener_plastik"].y),
|
|
||||||
(obiekty["kontener_organiczne"].x, obiekty["kontener_organiczne"].y)]
|
|
||||||
temp = False
|
|
||||||
while nieodwiedzone_domy:
|
while nieodwiedzone_domy:
|
||||||
nieodwiedzone_domy.sort(key=lambda x: astar.heurystyka(obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), x))
|
nieodwiedzone_domy.sort(key=lambda x: astar.heurystyka(obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), x))
|
||||||
cel = nieodwiedzone_domy.pop(0)
|
cel = nieodwiedzone_domy.pop(0)
|
||||||
|
BIN
resources/screenShots/funkcjaNastepnika.png
Normal file
BIN
resources/screenShots/funkcjaNastepnika.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
BIN
resources/screenShots/heurystyka.png
Normal file
BIN
resources/screenShots/heurystyka.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
resources/screenShots/petlaGlowna.png
Normal file
BIN
resources/screenShots/petlaGlowna.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
BIN
resources/screenShots/route-planning.gif
Normal file
BIN
resources/screenShots/route-planning.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.2 MiB |
@ -8,7 +8,13 @@
|
|||||||
|
|
||||||
## 1. Ogólne działanie:
|
## 1. Ogólne działanie:
|
||||||
|
|
||||||
![gif](resources/screenShots/gifAstar.gif)
|
![gif](resources/screenShots/route-planning.gif)
|
||||||
|
|
||||||
|
- Śmieciarka zaczyna ruch z pozycji (10, 10), po czym odwiedza wszystkie domy,
|
||||||
|
których współrzędne zostały wylosowane, następnie jedzie na wysypisko do najbliższego kontenera,
|
||||||
|
po czym wybiera następny najbliższy nieodwiedzony kontener.
|
||||||
|
- Droga między domami jest wyznaczana przez algorytm A*.
|
||||||
|
- Każdy następny dom jest najbliższym, jeszcze nieodwiedzonym domem.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -20,7 +26,12 @@
|
|||||||
|
|
||||||
## 3. Funkcja następnika:
|
## 3. Funkcja następnika:
|
||||||
|
|
||||||
![funkcja](resources/screenShots/petlaGlowna.png)
|
![succ](resources/screenShots/funkcjaNastepnika.png)
|
||||||
|
|
||||||
|
gdzie sąsiedzi to:
|
||||||
|
```
|
||||||
|
sasiedzi = [(0, 1), (0, -1), (1, 0), (-1, 0)]
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -28,4 +39,10 @@
|
|||||||
|
|
||||||
![heurystyka](resources/screenShots/heurystyka.png)
|
![heurystyka](resources/screenShots/heurystyka.png)
|
||||||
|
|
||||||
|
- Heurystyka to suma odległości Manhattan
|
||||||
|
- Koszt wjechania na pole, na którym jest dom wynosi 3
|
||||||
|
- Koszt wjechania na pole, które jest wysypiskiem wynosi 2
|
||||||
|
- Koszt wjechania na pole, które jest kontenerem wynosi 3
|
||||||
|
- Koszt wjechania na zwyczajne pole wynosi 1
|
||||||
|
|
||||||
---
|
---
|
Loading…
Reference in New Issue
Block a user