2
0
forked from s444420/AL-2020
AL-2020/route-planning.md

78 lines
2.4 KiB
Markdown
Raw Normal View History

2020-04-28 23:27:45 +02:00
# Raport 2
### Definicja pętli głownej strategi przeszukiwania
2020-04-28 23:36:46 +02:00
Naszą główną funkcją jest funkcja `aStar(startField, goalField)`, przyjmuje ona dwa argumenty: `startField` - pole z którego wyrusza agent `goalField` - cel drogi agenta. Zwraca ona ścieszkę z `startField` do `goalField`.
2020-04-28 23:27:45 +02:00
2020-04-28 23:37:35 +02:00
#### Opis
2020-04-28 23:27:45 +02:00
`closedSet` - lista zawierająca sprawdzane i sprawdzone pola z listy `openSet`
2020-04-28 23:37:48 +02:00
2020-04-28 23:27:45 +02:00
`openSet` - lista zawierająca pola do sprawdzenia
2020-04-28 23:37:48 +02:00
2020-04-28 23:27:45 +02:00
`path` - lista zawierająca pola tworzące ścieszkę do wybranego celu
2020-04-28 23:41:12 +02:00
2020-04-28 23:41:00 +02:00
Dodajemy pierwszy element który będziemy sprawdzać do listy openSet: `addToOpenSet(openSet, startField)`
Dopuki lista `openSet` nie bedzie pusta sprawdzamy jej elementy: `while(openSet.length > 0)`
Wybieramy najbardziej obiecujący element z zbioru `openSet`: `let current = findLowestFScore(openSet, goalField)`
2020-04-28 23:38:21 +02:00
2020-04-28 23:27:45 +02:00
Jeśli pole `current` okaże się naszym celem tworzymy ścieszkę z punktu startowego do naszego celu.
2020-04-28 23:41:00 +02:00
2020-04-28 23:27:45 +02:00
```javascript
if(current === goalField){
path = []
var temp = current;
path.push(temp);
while(temp.previous){
path.push(temp.previous);
temp = temp.previous
}
```
2020-04-28 23:41:00 +02:00
2020-04-28 23:27:45 +02:00
Następnie kolorujemy tą ścieszkę i kończymy funkcję zwracając ścieszkę `path`
2020-04-28 23:41:00 +02:00
2020-04-28 23:27:45 +02:00
```javascript
for(var i = 0; i < path.length; i++){
colorYellow(path[i]);
}
return path
```
2020-04-28 23:41:00 +02:00
2020-04-28 23:27:45 +02:00
Jeśli pole `current` nie jest naszym celem, to usuwamy je z listy `openSet` i dodajemy do listy `closedSet`
2020-04-28 23:41:00 +02:00
```javascript
removeFromSet(openSet, current);
addToClosedSet(closedSet, current);
```
Pobieramy sąsiadów pola `current`: `var neighbors = current.neighbors;`
Dla każdego sąsiada obliczamy koszt dotarcia do niego z punktu początkowego najlepszą ścieszką.
2020-04-28 23:27:45 +02:00
```javascript
for(var i = 0; i < neighbors.length; i++){
var neighbor = neighbors[i];
if(!closedSet.includes(neighbor)){
var tempG = current.gScore + neighbor.costOfTravel;
if(openSet.includes(neighbor)){
if(tempG < neighbor.gScore){
neighbor.gScore = tempG;
}
} else {
neighbor.gScore = tempG;
addToOpenSet(openSet, neighbor);
}
```
2020-04-28 23:41:00 +02:00
Po przypisaniu kosztu do sąsiada dodajemy jego odległość do celu: `neighbor.heuristic = getDistance(neighbor, goalField);`,
??????????: `neighbor.f = neighbor.gScore + neighbor.heuristic;`
oraz jego poprzednika: `neighbor.previous = current;`
2020-04-28 23:27:45 +02:00
### Definicja funkcji następnika
### Definicja przyjętej heurystyki