stworzone screeny

This commit is contained in:
Adam Osiowy 2020-04-28 17:33:36 +02:00
parent 8d7d85fc35
commit fc0f59ba53
7 changed files with 34 additions and 21 deletions

View File

@ -13,21 +13,20 @@ def heurystyka(obiekty, a, b):
def astar(obiekty, start, cel):
sasiedzi = [(0, 1), (0, -1), (1, 0), (-1, 0)]
close_set = set()
came_from = {}
hscore = {start: heurystyka(obiekty, start, cel)}
gscore = {start: 0}
fscore = {start: heurystyka(obiekty, start, cel)}
oheap = []
heapq.heappush(oheap, (fscore[start], start))
while oheap:
current = heapq.heappop(oheap)[1]
fringe = []
heapq.heappush(fringe, (fscore[start], start))
while fringe:
current = heapq.heappop(fringe)[1]
if current == cel:
data = []
while current in came_from:
data.append(current)
current = came_from[current]
return data[::-1]
@ -41,14 +40,14 @@ def astar(obiekty, start, cel):
continue
elif 6 <= sasiad[0] <= 7 and 10 <= sasiad[1] <= 11:
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
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
hscore[sasiad] = tentative_h_score
fscore[sasiad] = tentative_h_score + gscore[current]
gscore[sasiad] = gscore[current] + heurystyka(obiekty, current, sasiad)
heapq.heappush(oheap, (fscore[sasiad], sasiad))
heapq.heappush(fringe, (fscore[sasiad], sasiad))
return False

15
game.py
View File

@ -38,10 +38,15 @@ WINDOW_SIZE = [1300, 980]
def game():
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
done = False
clock = pygame.time.Clock()
temp = True
# -------- Glowna petla programu -----------
while not done:
@ -70,14 +75,6 @@ def game():
obiekty["smieciarka"].w_dol()
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:
nieodwiedzone_domy.sort(key=lambda x: astar.heurystyka(obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), x))
cel = nieodwiedzone_domy.pop(0)

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 MiB

View File

@ -8,7 +8,13 @@
## 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:
![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 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
---