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):
|
||||
|
||||
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
15
game.py
@ -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)
|
||||
|
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:
|
||||
|
||||
![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
|
||||
|
||||
---
|
Loading…
Reference in New Issue
Block a user